Есть ли в stl итератор noop? - PullRequest
       2

Есть ли в stl итератор noop?

2 голосов
/ 02 апреля 2019

Если бы я хотел скопировать одно и то же значение по всему диапазону итераторов, я бы подумал, что было бы легко иметь итератор noop, в котором вы передаете ему значение, а когда оно увеличивается, оно никуда не перемещается. Это позволило бы использовать существующие алгоритмы std::copy и std::copy_if.

Однако я не могу найти такого зверя. Я собираюсь катиться самостоятельно?

Ответы [ 2 ]

6 голосов
/ 02 апреля 2019

Используйте std::fill или std::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.
3 голосов
/ 02 апреля 2019

Насколько я знаю, для этого нет итератора, но есть алгоритм.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; });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...