我相信答案取决于实现。它最多需要线性时间,但某些实现可能会选择对此进行优化。
Per '清除向量是否会影响其容量?',即使在.clear被调用时,MSVC 和 G++ 都不会降低其向量的容量。查看 G++ 头文件,很明显,.clear只要元素是标量(原始算术类型或指针),默认分配器就是常量时间。
从 a 可能如何实施的角度来思考这一点vector。当您调用时:
delete [] internalPtr;
Run Code Online (Sandbox Code Playgroud)
会发生什么?
对于原始类型,前者仍然必须发生,但它们不存在析构函数。因此delete[]将完全根据堆删除内存块的速度来执行