stl中是否有一个noop迭代器?

时间:2019-04-02 13:32:25

标签: c++ stl

如果我想在迭代器范围内复制相同的值,我认为在没有Noop迭代器的地方传递值很容易,并且当它递增时,它不会在任何地方移动。这将允许使用现有的std::copystd::copy_if算法。

但是,我似乎找不到这种野兽。我要自己滚吗?

2 个答案:

答案 0 :(得分:6)

使用std::fillstd::fill_n算法。

某些容器,例如std::vector<>std::list<>具有大小和初始值设定项的构造函数:

std::vector<int> v(10, 42); // 42 is the initializer
v.resize(20, 42); // Initialize new elements with 42.

答案 1 :(得分:3)

据我所知,没有迭代器,但是有一个算法。 std::generate的取值范围是为从传递给它的生成器返回的每个元素分配一个值。如果您要分配所有看起来像这样的实例42

std::vector<int> vec(20);
std::generate(vec.begin(), vec.end(), []() { return 42; });

您甚至可以获得像这样变化的值

std::vector<int> vec(20);
std::generate(vec.begin(), vec.end(), []() { static int counter = 0; ++counter; return counter * counter; });