[英]Is `std::vector<primitive>::clear()` a constant time operation?
对向量调用clear()
将调用向量中存储的任何内容的析构函数,这是一个线性时间操作。 但是,当向量包含int
或double
等原始类型时,情况是否如此?
我相信答案取决于实现。 它最多需要线性时间,但某些实现可能会选择对此进行优化。
Per ' 清除向量是否会影响其容量? ',即使在.clear
时,MSVC 和 G++ 都不会降低其向量的容量。 查看 G++ 头文件,很明显.clear
是具有默认分配器的常量时间,只要元素是标量(原始算术类型或指针)。
从如何实现vector
的 POV 考虑这一点。 当你调用:
delete [] internalPtr;
发生什么了?
对于原始类型,前者仍然必须发生,但它们不存在析构函数。 因此, delete[]
将完全根据堆删除内存块的速度执行
嗯..它说 clear() 是线性的,但我们也知道它调用每个项目的析构函数......
http://www.cplusplus.com/reference/vector/vector/clear/
如果析构函数调用不是线性的怎么办?
然而,在基元上,析构函数调用是线性的(或常量,这并不重要,除非它不超过线性)
所以是的,在原语上 clear() 总是一个线性操作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.