7

可能重复:
当 T 是原始类型时,std::vector<T>::clear() 的复杂性是多少?

如果我有std::vector一个原始类型,并且我调用clear()(这种方式push_back从 的开头开始capacity),clear()调用将在恒定时间还是线性时间内完成?文档说它会破坏所有元素,但如果元素是 int,则不应该有任何东西可以破坏,对吧?


编辑:我找到了一个副本,其中有一张海报,他详细解释了实现可以检查析构函数是否微不足道,并给出了一个具有该检查的编译器的示例(GCC)。

当 T 是原始类型时, std::vector<T>::clear() 的复杂性是多少?

4

2 回答 2

5

这取决于向量是如何实现的,但是具有简单析构函数的对象数组(包括诸如内置整数类型的 POD int)应该能够通过一次调用安全地释放,vector<T>::allocator_type::deallocate而无需循环元素并单独调用析构函数。std::vector可以使用或编译器内部的实现type_traits来确定是否T有一个普通的析构函数,并相应地释放内部数组。您需要检查您的实现的源代码以了解它的作用,但大多数主流实现std::vector将为您提供具有琐碎析构函数的类型的常量时间释放(或至少对于整数类型和其他 POD 的常量时间)。

于 2012-12-30T20:23:29.520 回答
2

该标准不保证std::vector::clear.

于 2012-12-30T20:24:05.700 回答