向量在添加元素时会每次加倍其大小,但是当您删除元素时呢?比如向数组中添加了800个元素,在添加第800个元素时,向量将其大小加倍以能够容纳1600个元素。现在,如果您开始删除元素,直到仅保留5或10个元素,它会意识到向量比未来元素保留的空间的一半要小得多,并保留更少的空间吗?
当删除元素时,向量不会降低容量!这是为了将来有效地将元素添加到现有缓冲区中。
vec.resize(vec.size());
- bialpioerase()
会使得其后面的迭代器和引用无效。 - AlexD#include <iostream>
#include <vector>
void printInfo(std::vector<char> &_vector)
{
std::cout << "Size: " << _vector.size() << std::endl;
std::cout << "Capacity: " << _vector.capacity() << std::endl;
std::cout << std::endl;
}
int main()
{
int numbElems = 10;
std::vector<char> myvector;
std::cout << "Nothing entered" << std::endl;
printInfo(myvector);
for (int i = 0; i < 10; i++) {
for (int c = 0; c < numbElems; c++) {
myvector.push_back(i);
}
std::cout << "Pushed " << numbElems << std::endl;
printInfo(myvector);
}
for (int i = 0; i < 5; i++) {
for (int c = 0; c < numbElems; c++) {
myvector.pop_back();
}
std::cout << "Popped " << numbElems << std::endl;
printInfo(myvector);
}
myvector.erase(myvector.begin(), myvector.end());
printInfo(myvector);
std::cout << "max_size: " << myvector.max_size() << std::endl;
return 0;
}
less
滚动输出。g++
。不确定如何正确表达。但是,它确实取决于向量的实现。 - user1944429
shrink_to_fit
。 - chriserase()
不会减少capacity()
。 - Jerry Coffinclear()
也不行。 - bialpioshrink_to_fit
在 C++11 中被添加;在此之前,您必须使用“交换技巧”。 - M.M