gpt4 book ai didi

c++ - C++ vector 是如何工作的

转载 作者:太空狗 更新时间:2023-10-29 20:29:08 27 4
gpt4 key购买 nike

假设我有一个 vector V,它有 10 个元素。如果我使用 v.erase(v.begin()) 删除第一个元素(在索引 0 处),那么 STL vector 如何处理这个?

它会创建另一个新 vector 并将元素从旧 vector 复制到新 vector 并释放旧 vector 吗?或者它是否从索引 1 开始复制每个元素并将元素复制到 index-1 ?

如果我一次需要一个大小为 100,000 的 vector ,之后我不会使用那么多空间,假设我只需要一个大小为 10 的 vector ,那么它会自动减小大小吗? (我不这么认为)

网上查了一下,只有API和STL库的使用教程。是否有任何好的引用资料可以让我了解 STL 库的实现或复杂性?

最佳答案

实际上,vector 的实现是可见的,因为它是一个模板,因此您可以查看它以获取详细信息:

iterator erase(const_iterator _Where)
{ // erase element at where
if (_Where._Mycont != this
|| _Where._Myptr < _Myfirst || _Mylast <= _Where._Myptr)
_DEBUG_ERROR("vector erase iterator outside range");
_STDEXT unchecked_copy(_Where._Myptr + 1, _Mylast, _Where._Myptr);
_Destroy(_Mylast - 1, _Mylast);
_Orphan_range(_Where._Myptr, _Mylast);
--_Mylast;
return (iterator(_Where._Myptr, this));
}

基本上,这条线

unchecked_copy(_Where._Myptr + 1, _Mylast, _Where._Myptr);

完全按照您的想法行事 - 复制以下元素(或如 bames53 指出的那样在 C++11 中移动它们)。

要回答你的第二个问题,不,容量不能自行减少。

std 中算法的复杂性可以在http://www.cplusplus.com/reference/stl/ 找到。如前所述,实现是可见的。

关于c++ - C++ vector 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11024103/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com