stl 中是否有 noop 迭代器

Is there a noop iterator in the stl?

本文关键字:noop 迭代器 是否 stl      更新时间:2023-10-16

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

但是,我似乎找不到这样的野兽。 我必须自己滚吗?

使用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.

据我所知,没有迭代器,但有一个算法。 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; });