刚开始接触vector的时候觉得好高级,不仅可以做到变长数组,而且随用随加,非常方便,网上有一种说法说vector是一开始申请了某一段固定大小内存,比如1000个元素长度,如果不够了再重新申请一段倍长的内存,但是事实真是如此吗,请先看如下程序:
#include <iostream>
#include <vector>
using namespace std;
struct Node
{
int data;
Node* last;
};
int main(void)
{
vector<Node> node_list;
Node node_1;
node_1.data = 1;
Node node_2;
node_2.data = 2;
node_list.push_back(node_1);
node_2.last = &node_list[0];
cout << node_2.last->data << endl;
node_list.push_back(node_2);
cout << node_list[1].last->data << endl;
return 0;
}
上述程序将自定义的两个node压入栈中,预测的输出应该是“1 换行 1”,但是实际输出变成了“1 换行 -572662307”,这是为什么呢,可能你已经想到了vector在每次增长时进行的操作,没错,在每次增长进行push_ back的时候,会重新申请多一个元素的内存,同时将之前的内存释放,这就导致了输出的错误,可以见得c++的其他模板类估计也是这样处理的,所以我们在使用时要小心这种错误。