Оптимизация векторов C ++

У меня есть класс A, и у него есть личный член int _i. Я хочу, чтобы n экземпляров A были сохранены в векторе. Таким образом, я дал начальную емкость для вектора. Также я хочу хранить объекты с разными значениями _i и создавать объекты с разными значениями в цикле. Соответствующий код выглядит следующим образом:

 #include <vector>
#include <iostream>

using namespace std;

class A
{
public:
A( int i = -1 ) { _i = i; cout << "cc  " << _i << endl; }
A( const A &other ) { _i = other._i; cout << "ccc " << _i << endl; }
~A() { cout << "dc  " << _i << endl; }
int get_i() const { return _i; }
private:
int _i;
};

const int n = 2;

vector<A> v( n );

int main()
{
cout << "---" << endl;

for ( int i = 0; i < n; i++ )
v[i] = A( i );

cout << "---" << endl;

for ( int i = 0; i < n; i++ )
cout << v[i].get_i() << endl;

cin.ignore( 1 );

return 0;
}

output:

cc  -1
ccc -1
dc  -1
cc  -1
ccc -1
dc  -1
---
cc  0
dc  0
cc  1
dc  1
---
0
1

Я думаю, начальный параметр емкости сначала создает и разрушает объекты без необходимости. И в первом цикле временные объекты также создаются без необходимости. У меня вопрос, как я могу исправить код, чтобы напрямую передавать объекты в вектор без конструкции по умолчанию и временного объекта? Ниже мой желаемый результат:

---
cc  0
cc  1
---
0
1

На самом деле, я не знаю, является ли создание по умолчанию и создание временных объектов проблем с производительностью или нет.

0

Решение

использование reserveне resize, чтобы установить емкость. А потом использовать emplace_back для строительства на месте, чтобы избежать временных.

vector<A> v;

int main()
{
v.reserve(n)
cout << "---" << endl;

for ( int i = 0; i < n; i++ )
v.emplace_back( 1 );
}
3

Другие решения

Других решений пока нет …