STL 벡터 클래스는 push_back을 호출 할 때마다 복사 생성자를 사용하여 개체의 복사본을 저장합니다. 프로그램을 느리게하지 않겠습니까? 개체에 대한 포인터를 처리하는 클래스의 사용자 지정 연결된 목록 종류를 가질 수 있습니다. 그것은 STL의 몇 가지 이점을 가지지는 못하지만 더 빨라야합니다. 출력도 그 값을 검색 할 때 추가 할 때 복사 생성자 두 번 호출 보여줍니다STL 벡터 성능
adding first...copy
adding second...copy
copy
:
#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;
}
출력과 같이 나온다 :
아래 코드를 참조하십시오. 큰 오브젝트가있을 때 성능에 영향을 줍니까?
논쟁의 여지가있는 몇 가지 디자인 옵션이 있습니다.하지만 여기서는 그렇지 않습니다 : O (1) 삽입을위한 링크 된 목록을 원할 경우 자신의 롤을 사용하지 마십시오. - std :: 목록'. –
x가 y보다 빠르다는 것을 묻는다면, 그냥 시도해보고 측정하십시오. –