std :: vector <int> :: clear,constant time?</int>

时间:2012-12-30 20:19:53

标签: c++ vector primitive-types

  

可能重复:
  What is the complexity of std::vector<T>::clear() when T is a primitive type?

如果我有std::vector原始类型,并且我调用clear()(这种方式push_backcapacity的开头开始),则是{{ 1}}呼叫将在恒定时间或线性时间内完成?文档说它会破坏所有元素,但是如果元素是一个int,那么就不应该有任何东西可以销毁,对吗?


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

  

What is the complexity of std::vector<T>::clear() when T is a primitive type?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

该标准不保证std::vector::clear的复杂性,尽管您希望操作在复杂元素类型的容器大小中是线性的,而对于POD则是常量。