相关疑难解决方法(0)

当T是基本类型时,std :: vector <T> :: clear()的复杂性是多少?

我理解clear()操作的复杂性在容器的大小上是线性的,因为必须调用析构函数.但原始类型(和POD)呢?似乎最好的做法是将矢量大小设置为0,这样复杂性就是不变的.

如果可以,std :: unordered_map也可以吗?

complexity-theory primitive unordered-map vector clear

14
推荐指数
2
解决办法
3197
查看次数

`std :: vector <T> :: clear`*的时间复杂度是否真的没有指定?

这个问题的过程中,发现std::vector<T>::clearC++标准似乎没有时间复杂性要求.

23.2.3下的表100说:

销毁所有元素a.使引用元素的所有引用,指针和迭代器a无效并且可能使过去的迭代器无效.发布:a.empty()退货true

而且......就是这样.在23.3.6下没有明确的条目,并且没有明确指出以下内容适用于clear:

[C++11: 23.3.6.1/1]:向量是一个支持随机访问迭代器的序列容器.此外,它支持(摊销)最后的恒定时间插入和擦除操作; 在中间插入和擦除需要线性时间.存储管理是自动处理的,但可以提供提示以提高效率.[..]

那么......这是真的吗?或者我只是错过了它?

c++ std language-lawyer

13
推荐指数
1
解决办法
1206
查看次数

vector :: clear的复杂性是未指定的吗?

根据来自`std :: vector <primitive> :: clear()`的讨论是一个恒定时间操作吗?,有人指出,C++标准似乎没有指定运行时间vector::clear.

它为有序(表102)和无序关联容器(表103)(均为线性)指定list::clear(线性;§23.3.5.4.5)的运行时间.clear.然而,vector::clear似乎缺少(虽然其他vector成员,似乎.data并且.swap似乎具有指定的复杂性).

它真的没有说明,还是我错过了什么?

c++ vector language-lawyer

12
推荐指数
1
解决办法
692
查看次数