Для последовательной инициализации элементов в вектор их можно добавлять через push_back
и emplace_back
. А что если есть некоторая перестановка индексов, в соответствии с которой надо заполнить вектор? Получается, мне надо сначала изменить размер вектора, а потом заполнять его по индексам. Но при изменении размера он сразу же заполняется дефаултными значениями, т. е. для каждого элемента вызывается дефаултный конструктор.
Есть ли способ заполнить вектор не подряд и при этом не вызывать дефаултный конструктор? Т. е. интересует аналог следующей функции fill_p
, который работает аналогично, но не выводит no args
.
https://ideone.com/fAKFeW
#include <iostream>
#include <vector>
using namespace std;
struct smth
{
smth() { cout << "no args" << endl; }
smth(int x) { cout << "with x = " << x << endl; }
};
void fill_pb()
{
cout << "=== fill_pb ===" << endl;
vector <smth> v;
for (int q=0; q<3; ++q) v.push_back(q);
cout << endl;
}
void fill_eb()
{
cout << "=== fill_eb ===" << endl;
vector <smth> v;
for (int q=0; q<3; ++q) v.emplace_back(q);
cout << endl;
}
void fill_p(vector <int> p)
{
cout << "=== fill_p ===" << endl;
vector <smth> v(p.size());
for (int q=0; q<p.size(); ++q) v[p[q]] = p[q];
cout << endl;
}
int main()
{
fill_pb();
fill_eb();
fill_p({3,1,0,2});
return 0;
}
Вывод:
=== fill_pb ===
with x = 0
with x = 1
with x = 2
=== fill_eb ===
with x = 0
with x = 1
with x = 2
=== fill_p ===
no args
no args
no args
no args
with x = 3
with x = 1
with x = 0
with x = 2
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Я пытаюсь вывести тип поля класса в конструкторе следующим образом:
Задание звучит так: Представить таблицу в виде линейного списка L, элементами которого являются строки таблицы: №, Фамилия, Оценки (Физика,...