std::vector:<int>:clear, constant time?
std::vector<int>::clear, constant time?
可能重复:
std::vector<的复杂性是什么;T>:clear((当T是基元类型时?
如果我有一个具有基元类型的std::vector
,并且我调用clear()
(这样push_back
从capacity
的开头开始(,那么clear()
调用将在恒定时间还是线性时间内完成?文档说它会销毁所有元素,但如果元素是int,就不应该有任何东西要销毁,对吧?
编辑:我发现了一个副本,上面有一个海报,详细解释了实现可以检查析构函数是否微不足道,并给出了一个有这种检查的编译器(GCC(的例子。
std::vector<的复杂性是什么;T>:clear((当T是基元类型时?
这取决于向量的实现方式,但具有琐碎析构函数的对象数组(包括像int
这样的内置整数类型的POD(应该能够通过对vector<T>::allocator_type::deallocate
的单个调用来安全地释放,而无需在元素上循环并单独调用析构函数。std::vector
的实现可以使用type_traits
或编译器内部来确定T
是否具有平凡的析构函数,并相应地解除分配内部数组。您需要检查实现的源代码,以了解它的作用,但std::vector
的大多数主流实现将为具有琐碎析构函数的类型提供恒定时间的释放(或者至少为整型和其他POD提供恒定时间(。
标准并不能保证std::vector::clear
的复杂性,尽管对于复杂的元素类型,操作在容器大小上是线性的,而对于POD,操作是常量。
相关文章:
- 为什么static_assert错误:即使我传递常量"expression must have a constant value"?
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 为什么我会收到"Run-Time Check Failure #2 - Stack around the variable 'pr' was corrupted"错误?
- 解析某些行的文本和输出"time of appearance"
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- 返回time()库函数的数据类型
- 错误 C2059:语法错误:从结构成员声明'constant'
- 如何修复 eigen3 中的'non-type template argument is not a constant expression'?
- 如何将 time-uuid(存储在 boost uuid 中)转换为时间戳/自纪元以来的时间?
- 如何修复此错误"the value of 'x1' is not usable in a constant expression"?static_assert
- 如何从 boost::p osix_time::p time 获取秒数
- 调用 dll 函数时"Run-Time Check Failure #0 - The value of ESP"
- C++ SRAND(time(0)) 在猜谜游戏中不起作用
- 即使包含 <time.h 后仍"‘CLOCK_PER_SEC’ was not declared in this scope"错误>
- struct TM time;vs TM time = {}.输出相同但不相同?
- 使用 Windows 寄存器查找下一个"Daylight Saving Time"
- c++ get millsecond time
- "Feature X requires run-time support"的含义是什么?
- 使用STD和c++从set with constant time中删除一个值
- std::vector:<int>:clear, constant time?