【发布时间】:2018-10-13 09:19:27
【问题描述】:
C++14 final working draft 对std::vector 发表以下评论:
存储管理是自动处理的,但可以给出提示以提高效率。
cppreference 说:
向量的存储是自动处理的,可以根据需要进行扩展和收缩。
而Wikipedia entry for Dynamic array 说:
C++ 的
std::vector和 Rust 的std::vec::Vec是动态数组的实现
所以我认为当一个向量的容量远大于它的大小时,它应该自动减少它的容量。我编写了以下代码来检查我的假设:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {};
cout << "initialization" << endl;
cout << " capacity: " << v.capacity() << endl;
cout << " size: " << v.size() << endl;
for (int i = 1; i <= 10000; i++)
v.push_back(i);
cout << "after inserting a lot of elements" << endl;
cout << " capacity: " << v.capacity() << endl;
cout << " size: " << v.size() << endl;
v.erase(v.begin() + 1, v.begin() + 10000);
cout << "after erasing a lot of elements" << endl;
cout << " capacity: " << v.capacity() << endl;
cout << " size: " << v.size() << endl;
v.push_back(9);
cout << "after inserting another element" << endl;
cout << " capacity: " << v.capacity() << endl;
cout << " size: " << v.size() << endl;
}
我使用g++ -std=c++14 code.cc 编译代码。运行结果 a.out 会产生以下输出。我正在使用 macOS Mojave。
initialization
capacity: 0
size: 0
after inserting a lot of elements
capacity: 16384
size: 10000
after erasing a lot of elements
capacity: 16384
size: 1
after inserting another element
capacity: 16384
size: 2
所以看起来std::vector 并没有减少它的容量,即使它的容量远大于它的大小。
std::vector 会减少其容量吗?
那么是否有一些条件可以触发其容量的减少呢?
【问题讨论】:
-
只是我的,但如果一个向量到达某个
size()。那么有理由假设它会再次达到这个目标。而减少capacity只是浪费时间。
标签: c++ vector std stdvector c++-standard-library