Mr.*_*ith 7 c++ vector primitive-types
如果我有一个std::vector原始类型,并且我调用clear()(这种方式push_back从头开始capacity),clear()调用将在恒定时间或线性时间内完成吗?文档说它会破坏所有元素,但是如果元素是一个int,那么就不应该有任何东西需要破坏,对吧?
编辑:我发现了一个副本,其中有一张海报,详细解释了实现可以检查析构函数是否微不足道,并给出了一个具有该检查(GCC)的编译器的示例.
这取决于向量的实现方式,但是具有简单析构函数的对象数组(包括诸如内置整数类型之类的 POD int)应该能够通过一次调用安全地解除分配,vector<T>::allocator_type::deallocate而无需循环遍历元素并单独调用析构函数。的实现std::vector可以使用type_traits或编译器内部来确定是否T有一个简单的析构函数,并相应地释放内部数组。您需要检查您的实现的源代码以了解它的作用,但大多数主流实现std::vector将为您提供具有平凡析构函数的类型的恒定时间解除分配(或至少为整数类型和其他 POD 的恒定时间)。
| 归档时间: |
|
| 查看次数: |
1807 次 |
| 最近记录: |