Заполнение векторов. 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);
Хоть это странно выглядит заполнять так как у вас и также неверно, но я могу предложить минимальный набор правок, без .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