C++ reserve和resize的区别
前置知识:
capacity是指容器的容量,指该容器如果不重新分配内存,最多只能容纳capacity个元素。
size是指容器中当前存在的元素个数。
capacity和size的关系:size <= capacity
reserve(n)是指为容器至少预分配n * sizeof(元素)的容量。如果分配的n<size,则不会起作用。
std::vector<int> a(11); std::cout << a.size() << ' ' << a.capacity() << std::endl;//输出:11 11 a.reserve(10); std::cout << a.size() << ' ' << a.capacity() << std::endl;//输出:11 11 a.push_back(1); std::cout << a.size() << ' ' << a.capacity() << std::endl;//输出:12 16 a.reserve(17); std::cout << a.size() << ' ' << a.capacity();//输出:12 17
resize(n)是指采用无参(默认)构造函数,将容器中的元素数量扩展或缩减至n。如果capacity<n,则重新分配容器空间,使capacity>=n。
std::vector<int> a(11); std::cout << a.size() << ' ' << a.capacity() << std::endl;//输出:11 11 a.push_back(1); std::cout << a.size() << ' ' << a.capacity() << std::endl;//输出:12 16 a.resize(17); std::cout << a.size() << ' ' << a.capacity();//输出:17 24
(以上均为Visual Studio2019,c++ 14标准下的测试结果)