Заполнение векторов. C++

Захотел я заполнить вектор при помощи итераторов. Получился вот такой вот код:

int main()
{
    int n = 3;
    vector<int> vec2;
    for (vector<int>::iterator i = vec2.begin(); i!=vec2.end(); i++)
    {
        vec2.insert(i,n);
        n++;
    }

  return 0;
}

Проблема в том что ничего не заполняется. В чем проблема?


Ответы (2 шт):

Автор решения: Павел Ериков

Если вы хотите заполнить вектор при помощи итератора, то нужно воспользоваться операцией разыменования итератора.

Вот пример:

int main()
{
    int n = 3;
    //Размер вектора
    int size_vector = 3;
    //Выделим сразу память под size_vector элементов
    vector<int> vec2(size_vector);
    //Пройдемся по всему вектору
    for (vector<int>::iterator i = vec2.begin(); i != vec2.end(); i++)
    {
        //Операция разыменования позволяет изменить значение
        //элементу на который указывает итератор
        *i = n;
        n++;
    }

    return 0;
}

Так же вектор можно заполнить при помощи функции insert или push_back, но эти функции не меняют значения, а добавляют новые значения.

Если вам так нужно, то вот пример:

int main()
{
    int n = 3;
    int size_vector = 3;
    vector<int> vec2;

    vector<int>::iterator i = vec2.end();
    for (int j = 0; j < size_vector; ++j) {
        vec2.insert(i, n);
        n++;
        i = vec2.end();
    }

    return 0;
}

Но последний пример он больше для того, чтобы показать итератор, на самом деле проще убрать полностью переменную i и писать вот такую строчку:

vec2.insert(vec2.end(), temp);
→ Ссылка
Автор решения: Arty

Хоть это странно выглядит заполнять так как у вас и также неверно, но я могу предложить минимальный набор правок, без .insert(...), чтобы похожий на ваш код заработал, тоже с итераторами (для примера заполняю 25 элементов в векторе):

Попробовать онлайн!

#include <vector>
#include <iostream>
using namespace std;

int main()
{
    int n = 3;
    vector<int> vec2(25);
    for (vector<int>::iterator i = vec2.begin(); i != vec2.end(); ++i)
        *i = n++;
    for (auto x: vec2)
        cout << x << " ";
    return 0;
}

Вывод:

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 

Либо вариант заполнения с .insert(...) ниже:

Попробовать онлайн!

#include <vector>
#include <iostream>
using namespace std;

int main()
{
    int n = 3;
    vector<int> vec2;
    for (int j = 0; j < 25; ++j)
        vec2.insert(vec2.end(), n++);
    for (auto x: vec2)
        cout << x << " ";
    return 0;
}

Вывод:

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 
→ Ссылка