C++ vector::clear() - 破坏顺序? [复制]
Posted
技术标签:
【中文标题】C++ vector::clear() - 破坏顺序? [复制]【英文标题】:C++ vector::clear() - order of destruction? [duplicate] 【发布时间】:2019-01-09 20:17:26 【问题描述】:我已经四处搜索,但没有找到任何东西 - C++ 是否保证 std::vector 中的项目在调用 vector::clear() 时将被删除?
我有一个向量,其中一些项目依赖于向量中的其他项目,因此需要确保它被清除后进先出。 FIFO 会很好 - 我可以在调用 clear() 之前反转向量。
【问题讨论】:
析构函数是否依赖于链接的元素?如果没有,那么破坏的顺序就无关紧要了。 requirements for a sequence container 只是说clear()
销毁所有元素,容器的empty()
返回true
,复杂度是线性的。 std::vector
上的部分没有添加任何内容,因此似乎未指定顺序。
@errorika,对不起,我应该更清楚 - 是的,析构函数(在某些情况下)依赖于容器中的其他元素。
Vectors 不是 LIFO/FIFO 容器,它们没有插入顺序的记录。
使用保留插入顺序的容器,例如 std::stack
【参考方案1】:
根据sequence container requirements(std::vector
是其中之一),该标准仅说明clear()
:
销毁
a
中的所有元素。使所有引用、指针和 引用 a 的元素的迭代器可能会使 结束迭代器。确保:
a.empty()
返回true
。复杂性:线性。
所以不,您无法保证销毁顺序。
【讨论】:
以上是关于C++ vector::clear() - 破坏顺序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
vector.clear()后程序崩毁原因分析(单例与智能指针)