Что есть “Цикл для контейнера”?

176
06 июля 2019, 07:40

В задаче написано с помощью "Цикла для контейнера" заполнить контейнер единицами. Возник вопрос, что это такое? (Как оказалось, это не цикл for)

Answer 1

Если говорится о заполнении, то он уже имеет размер, поэтому:

std::vector<int> list(20);
// 20 единиц
list.assign(20, 1);

Метод практически проходит по каждому элементу и выполняет присваивание, но понятие "цикл контейнера" придуманное.

Варант:

std::list<int> list(20, 1);

Создает сразу такой список: это конечно эффективней

Но под названием "цикл для контейнера ", подходит:

for (std::vector<int>::iterator first = list.begin(); first != list.end(); ++first)
    *first = 1;

Или скорее вам нужно это:

for (int &elem : list){
    static int i = 0;
    elem = ++i;
} 

Заполнили возрастающими значениями, начиная от 1

Answer 2

Можно применить std::generate

С этой конструкцией вы можете описать довольно много разных вариантов заполнения:

Заполнить массив единицами:

std::generate(std::begin(mas), std::end(mas),
              [](){ return 1; }
              );

Заполнить массив возрастающими значениями, начиная с -4:

int initial = -4;
std::generate(std::begin(mas), std::end(mas),
              [&initial](){ return initial++; }
              );

Заполнить массив возрастающими значениями, начиная с -10, с шагом 3:

int initial = -10;
std::generate(std::begin(mas), std::end(mas),
              [&initial](){ initial += 3; return initial - 3; }
              );

Подробнее можно почитать на cppreference : https://en.cppreference.com/w/cpp/algorithm/generate .

Также обратите внимание на методы std::fill и std::iota, ниже в комментариях AR Hovsepyan про них упомянул. Если возможно - лучше использовать их, это правильнее, несмотря на то, что std::generate более универсален.

READ ALSO
Где хранится информация о потоках?

Где хранится информация о потоках?

Когда я создаю объект потока std::thread, я получаю поток в ядре? Имеется ввиду что ядро будет знать о потоке и если например из потока сделаю вызов...

187
Поиск подстроки в строке с помощью char

Поиск подстроки в строке с помощью char

Задание: Нужно произвести поиск вещественного числа с фиксированной точкой в строкеИ реализовать это через массив символов

187
Как изменить размер фотографии в px? [закрыт]

Как изменить размер фотографии в px? [закрыт]

Есть Bitmap (фотография) надо сделать его 250px на 250 pxКак это можно сделать?

172