Частичная инициализация вектора

100
16 марта 2021, 23:20

Для последовательной инициализации элементов в вектор их можно добавлять через 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
READ ALSO
вывести auto в конструкторе класса

вывести auto в конструкторе класса

Я пытаюсь вывести тип поля класса в конструкторе следующим образом:

101
Как правильно создать и вывести список?

Как правильно создать и вывести список?

Задание звучит так: Представить таблицу в виде линейного списка L, элементами которого являются строки таблицы: №, Фамилия, Оценки (Физика,...

90
Получить user data в Hook Proc

Получить user data в Hook Proc

Я имею класс следующего вида:

110
Что лучше цикл с условием или без него?

Что лучше цикл с условием или без него?

Обычно тело цикла выглядит как-то так:

82