Do(c++)向量在移除元素后收缩
Do (c++) vectors shrink after elements are removed?
添加元素时,每当矢量空间不足时,矢量的大小就会加倍,但删除元素时呢?假设你向一个数组添加了800个元素,在添加第800个元素后,向量的大小会翻倍,可以容纳1600个元素。现在,如果你开始去掉元素,直到它只容纳5或10个元素,该怎么办?
它会认识到向量比为未来元素保留的空间的一半小得多,并且保留的空间更少吗?
删除元素时,矢量的容量不会减少!这是为了允许将来的元素被有效地添加到现有的缓冲区中。
如果它已经分配了一块内存,它将继续使用它,因为它释放一些内存的效率很低,后来发现它必须分配更多的内存。
我总是建议编写一个测试代码片段来测试这类事情。
例如,我在2分钟内把这个放在一起,以验证我告诉你的是正确的信息:
#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;
}
如果编译并运行,您将看到Capacity的大小永远不会下降。即使在擦除之后,或者一些元件被移除。
在linux上,您可以使用less
来滚动输出。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 从控制台中删除最后打印的元素
- 擦除while循环中迭代的元素