点击(此处)折叠或打开
- /*
- g++和用vs2005得到的结果是不同的,因为vector分配内存的策略不同。
- 奇怪的是vs2005中的vector::push_back居然需要两次复制构造函数,而g++只需要一次,
- 这一点可以从代码中一个结果是11一个是12看到
- */
-
- #include <iostream>
- #include <vector>
- using namespace std;
- class A
- {
- public:
- static int i;
- A(){}
- A(const A& a)
- {
- i++;
- }
- };
- int A::i = 0;
- int main()
- {
- vector<A> vec(10); //调用十次
- cout<<"i:["<<A::i<<"]"<<endl;
-
- A::i = 0;
- vec.push_back(A());//空间已满,开辟空间,调用一次,复制原来的10个共十次,再加上最后一次调用,共12次
- cout<<"i:["<<A::i<<"]"<<endl;
-
- A::i = 0;
- vec.reserve(20);//空间不足,再次分配空间,调用拷贝构造函数,因为有11个元素,共调用11此,如果为resize函数的话,会20个都分配掉,为20次。
- cout<<"i:["<<A::i<<"]"<<endl;
-
- A::i = 0;
- vec.push_back(A());//空间足够,调用1次
- cout<<"i:["<<A::i<<"]"<<endl;
-
- return 0;
- }
g++结果: