编程的时候,看到了题目中使用了vector的resize()函数,过来总结一下。
vector函数头文件:#include <vector>
vector函数中有两个函数很容易混淆,一个是size( ) ,另一个是resize();
区别如下:
size( ) : 返回容器的大小;
resize():相当于对容器大小重新规划;
capacity() :返回容器当前能够容纳的元素数量;
size()是分配容器的内存大小,而capacity()只是设置容器容量大小,但并没有真正分配内存。
如下所示代码,解释size( ) 和 resize( )函数的使用情况:
1 #include <cstdlib> 2 #include <iostream> 3 #include <vector> 4 5 using namespace std; 6 7 int main(int argc, char *argv[]) 8 { 9 vector<int> vi(5); 10 cout << "vi size: " << vi.size() << endl; 11 for (int i = 0; i<5; i++) 12 { 13 vi[i] = i + 1; 14 cout << vi[i] << endl; 15 } 16 17 vi.resize(3); 18 19 cout << "vi size: " << vi.size() << endl; 20 cout << "Elements in vi:" << endl; 21 for (int i = 0; i<vi.size(); i++) 22 { 23 cout << vi[i] << endl; 24 } 25 26 cout << "Press the enter key to continue ..."; 27 cin.get(); 28 return EXIT_SUCCESS; 29
程序结果如下:
除了上诉两个函数以外,还有reserve()函数:
reserve():改变当前容器的最大容量(capacity),它不会生成元素,只是确定这个容器允许放入多少对象,如果reserve(len)的值大于当前的capacity(),那么会重新分配一块能存len个对象的空间,然后把之前v.size()个对象通过copy construtor复制过来,销毁之前的内存,如果reserve(len)的值小于当前的capacity(),则不做改变,但是resize 有可能会影响capacity的值 ;
代码如下:
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 int main() { 5 vector<int> a; 6 a.reserve(100); 7 a.resize(50); 8 cout << a.size() << " " << a.capacity() << endl; // 50 100 9 10 a.resize(150); 11 cout << a.size() << " " << a.capacity() << endl; //150 150 12 13 a.reserve(50); 14 cout << a.size() << " " << a.capacity() << endl; //150 150 15 16 a.resize(50); 17 cout << a.size() << " " << a.capacity() << endl; //50 150 18 return 0; 19 }
运行结果:
结论:
resize函数重新分配大小,改变容器的大小,并且创建对象
当n小于当前size()值时候,vector首先会减少size()值 保存前n个元素,然后将超出n的元素删除(remove and destroy)
当n大于当前size()值时候,vector会插入相应数量的元素 使得size()值达到n,并对这些元素进行初始化,如果调用上面的第二个resize函数,指定val,vector会用val来初始化这些新插入的元素
当n大于capacity()值的时候,会自动分配重新分配内存存储空间。
引用:https://www.cnblogs.com/biyeymyhjob/archive/2013/05/11/3072893.html