今天看到书本上有一句话是这样写的:要定义一个能够存放20个整数的向量对象,我们可以这样写:vector<int>ivec(20);
一开始我是这样理解的,我把它理解成了像数组一样,定义为20个元素的数组,然后往里面添加元素。如果超过20个会数组越界。
后来我为了验证我的理解,我就写代码验证了一下,发现我理解的是错误的?
vector<char> ivec(26);
cout << "<<<--" << ivec.capacity() << "-->>>" << endl;
定义了一个存储26个字符的向量对象,打印出来的容量是26;
然后我循环了26次添加了26个字母:
char ca[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
for(int i = 0;i < 26;i++){
ivc.push_back(ca[i]);
}
打印出来的容量是52;
一开始我很纳闷,我觉得容量应该是26,因为我没添加什么。然后我就把ivec打印了一遍,我看到打印出26个空字符。
这个时候我才明白,原来是这个定义存放26个字符的向量对象,定义了26个,顺便也把他初始化了。由于vector是可以动态变化的,我后添加进去的元素,就按照顺序往后添加了。不过书上的那句话,确实让我理解错了,如果在后面添加上一句话,我想应该会好理解一点。