文章目录
shrink_to_fit
// VS2019
int main() {
vector<int> arr(100);
arr.emplace_back(10);
cout << arr.size() << endl; // 输出101
cout << arr.capacity() << endl; // 输出150
arr.shrink_to_fit();
cout << arr.size() << endl; // 输出101
cout << arr.capacity() << endl; // 输出101
arr.swap(vector<int>());
cout << arr.size() << endl; // 输出0
cout << arr.capacity() << endl; // 输出0
}
从上面可以看出,在VS下vector扩容是1.5倍(Linux下是2倍)。由于扩容了之后,多出了49*sizeof(int)的无用内存,C++11提供了shrink_to_fit函数来释放这部分这部分内存,但是这个函数只是请求,并不保证一定成功。
而在C++11之前,都知道clear()函数是清除容器内元素个数,使其为0,但是并没有释放内存,所以一般都用swap函数来释放,现在可以clear后用shrink_to_fit函数来释放内存。
array
引入这个容器的目的就是为了替换C中的数组,由于C中的数组是没做安全检查的,所以C++提供了这个定长容器。也是为了和C++STL兼容,虽然STL也提供了通用函数begin()和end()函数来兼容传统C,但是array更规范。
int main() {
constexpr int size = 10;
array<int, size> arr{
1, 2, 5, 3, 5, 1 };
sort(arr.