2012-06-13 36 views
1

我想定义一个带有一些整数的向量,并用函数get_a_value()的结果填充它。它可以通过这样一个循环完成:如何用独立于索引的函数初始化矢量?

auto v = new std::vector<int>(7); 
for (int i = 0; i < 7; i++) 
    v->at(i) = get_a_value(); 

但是有一些冗余,让我感到不舒服。这可以用矢量初始化中的一些lambda魔术来解决吗?

auto v = new std::vector<int>(7, /* something involving get_a_value() here */); 

在每次调用中,get_a_value()的值可能不同。是的,我确实需要一个指针。

+2

“是的,我确实需要一个指针。”不是_raw_指针,你不。 –

+0

@JamesMcNellis:这是大学作业的一部分。 (实际的问题不是。) – Andreas

+2

注意:在极少数情况下,您要动态分配'std :: vector'。 –

回答

2

在一般情况下,你想这样:

std::vector<T> v; 
v.reserve(n); // reserve space only, no need to fill with default-constructed T's 

std::generate_n(std::back_inserter(v), n, get_a_T_value); // fill with n values 

这是最简单也是最有效的。我把它留给你去适应你的功课。