如何使用独立于索引的函数初始化向量?

时间:2012-06-13 21:48:20

标签: c++ lambda stdvector

我想定义一个包含一些整数的向量,并用函数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()的值可能不同。是的,我确实需要一个指针。

1 个答案:

答案 0 :(得分: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

这是最简单和最有效的。我留给你让它适应你的作业。