在向量上调用clear()
将调用存储在向量中的任何内容的析构函数,这是一个线性时间操作。但是,当向量包含int
或double
?
答案 0 :(得分:4)
我认为答案取决于实施。最多需要 线性时间,但有些实现可能会选择对此进行优化。
Per Does clearing a vector affect its capacity?',即使调用.clear
,MSVC和G ++都不会降低其向量的容量。查看G ++头文件,很明显.clear
是默认分配器的常量时间,只要元素是标量(原始算术类型或指针)。
答案 1 :(得分:2)
从POV中考虑如何实现vector
。当您调用时:
delete [] internalPtr;
会发生什么?
对于原始类型,前者仍然必须发生,但对于它们不存在析构函数。所以delete[]
将完全基于堆可以删除内存块的速度来执行
答案 2 :(得分:0)
答案 3 :(得分:0)
嗯..它说clear()是线性的,但我们也知道它调用每个项目的析构函数......
http://www.cplusplus.com/reference/vector/vector/clear/
如果析构函数调用不是线性的,该怎么办?
但是,对于原语,析构函数调用是线性的(或者是常量,除非它不是线性的,否则这并不重要)
所以是的,在原语上是明确的()总是线性操作