假设我有std::vector V5个元素,
V.erase(V.begin() + 2) 删除第3个元素.
STL vector实现将向上移动第4和第5个元素,然后破坏第5个元素.
即在e中删除元素ivector并不保证调用第i个析构函数.因为std::list,事实并非如此.擦除ith元素调用ith元素的析构函数.
STL对这种行为有什么看法?
这是从我的系统的stl_vector.h获取的代码:
392 iterator erase(iterator __position) {
393 if (__position + 1 != end())
394 copy(__position + 1, _M_finish, __position);
395 --_M_finish;
396 destroy(_M_finish);
397 return __position;
Run Code Online (Sandbox Code Playgroud)
与 不同的是std::list,std::vector它的元素是连续的。因此,当从容器中间删除一个元素时,复制分配所有需要移动的元素会更有意义。在这种情况下,将调用最后一个移位元素的析构函数。这避免了向量的整个数据的重新分配。
| 归档时间: |
|
| 查看次数: |
1560 次 |
| 最近记录: |