STL vector class хранит копию объекта с использованием конструктора копирования каждый раз, когда я вызываю push_back. Разве это не замедлит программу? У меня может быть специальный класс связанного списка, который имеет отношение к указателям на объекты. Хотя у него не было бы никаких преимуществ STL, но все же должно быть быстрее.STL vector performance
Смотрите этот код ниже:
#include <vector>
#include <iostream>
#include <cstring>
using namespace std;
class myclass
{
public:
char* text;
myclass(const char* val)
{
text = new char[10];
strcpy(text, val);
}
myclass(const myclass& v)
{
cout << "copy\n";
//copy data
}
};
int main()
{
vector<myclass> list;
myclass m1("first");
myclass m2("second");
cout << "adding first...";
list.push_back(m1);
cout << "adding second...";
list.push_back(m2);
cout << "returning...";
myclass& ret1 = list.at(0);
cout << ret1.text << endl;
return 0;
}
его выход выходит как:
adding first...copy
adding second...copy
copy
Выходные данные показывают, конструктор копирования вызывается как раз при добавлении и при получении значения даже тогда. Это влияет на производительность esp, когда у нас есть более крупные объекты?
Здесь есть несколько вариантов дизайна, которые являются спорными, но вот один из них: если вы решили, что хотите связанный список для вставки O (1), не сворачивайте свой собственный - используйте 'std :: список '. –
Когда вы спрашиваете себя, будет ли x быстрее, чем y, попробуйте его измерить. –