这篇我们讨论一下vector 自增长的体现
1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5 6 int main(int argc, const char *argv[]) 7 { 8 vector<int> vec; 9 vec.push_back(12); 10 11 cout << vec.size() << endl; //1 12 vec.resize(5); 13 cout << vec.size() << endl; 14 15 for(int i : vec) 16 { 17 cout << i << " "; 18 } 19 cout << endl; 20 21 return 0; 22 }
打印结果可知, resize()函数重置了 元素个数, 可能截断现元素, 如果扩充则补充0;
这里我们要理解两个概念:
rsize() 和 reserve()
了解这两个函数的区别,首先要搞清楚容器的capacity(容量)与size(长度)的区别。
size指容器当前拥有的元素个数;
而capacity则指容器在必须分配新存储空间之前可以存储的元素总数。
也可以说是预分配存储空间的大小。
1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5 6 void print(const vector<int> &vec) 7 { 8 cout << "size = " << vec.size() << endl; 9 cout << "capacity = " << vec.capacity() << endl; 10 } 11 12 int main(int argc, const char *argv[]) 13 { 14 vector<int> vec; 15 print(vec); // 0 16 17 for(int i = 0; i != 24; ++i) 18 { 19 vec.push_back(i); 20 print(vec); 21 } 22 print(vec); // 24 23 24 25 vec.reserve(50); 26 print(vec); 27 28 while(vec.size() < vec.capacity()) 29 { 30 vec.push_back(99); 31 } 32 33 print(vec); 34 35 vec.push_back(23); 36 print(vec); 37 38 39 return 0; 40 }
打印结果, 当size是24 的时候capacity 是32 , 也就是说在size大于32前, 不需要重新分配内存空间。