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()后程序崩毁原因分析(单例与智能指针)

为啥这段代码可以正常工作? (vector.clear(), vector<vector<int>>)

vector::clear() 花费这么多时间?

vector.clear()的内存泄露问题

C++顺时针打印矩阵

OpenCV 4.5 C++版 将矩阵顺时针旋转 90 度