我在互联网上读到,如果您重复清除std::vector
(处于紧密环路中),最好使用resize(0)
而不是clear()
,因为它可能更快。我不确定这一点。有没有人对此有明确的答案?矢量清除与调整大小
回答
我假定你的意思resize(0)
而不是setsize
,并调用的,与其clear()
,那你在谈论std::vector
。 IIRC最近的回答讨论了这个问题(无法找到链接),并且在现代STL实现中,clear()
很可能与resize(0)
相同。
以前清除矢量可能释放了所有内存(即其容量也降为零),导致在重新添加元素时重新分配,与保留容量的resize(0)
不同,因此重新分配的次数较少。但是,我认为在现代STL库中没有区别。如果你使用旧的STL实现,或者你只是偏执狂,resize(0)
可能会更快。
或使用MFC,它的数组(即矢量)类有一个setsize,其有效地调整大小 – 2010-04-29 16:29:15
我不知道MFC的容器,OP说矢量,所以我认为他们的意思是'std :: vector
这个声音实现特定,是你,你的图书馆和一个分析器的工作。但正如我所看到的,我不明白为什么resize(0)应该更快,因为两者实际上都必须调用erase(begin(),end())。
看着Dinkumware的STL源,既有效地调用erase(begin(), end());
clear()
会更有效,毫不奇怪,因为它只是一个案件来处理。但我不希望它是可衡量的。
当vector包含一个没有默认构造函数的类的对象时,clear和resize(0)之间似乎有区别。例如,下面的代码将编译:
#include <vector>
class A {
private:
int x,y;
public:
A(int x,int y) :x(x), y(y) {}
};
int main() {
std::vector <A> aa;
aa.clear();
}
但是,如果你代替aa.clear()
通过aa.resize(0)
,你会得到编译错误:
error: no matching function for call to 'A::A()'
我想这是因为调整大小需要默认构造函数,所以如果您调整大小到大于当前大小,它可以默认构造新元素。 – 2017-10-30 12:54:22
- 1. 清除和调整大小的矢量 - C++
- 2. for_each绑定矢量调整大小
- 3. 矢量调整大小()自动填充
- 4. 静态矢量调整大小
- 5. 矢量与大小初始化,无法清除
- 6. 动态调整大小并在C++中填充矢量矢量
- 7. c# - 调整大小时清除表面
- 8. 与调整大小
- 9. 矢量调整大小VS储备嵌套向量
- 10. 擦除一个或多个元素后,矢量数组是否调整大小?
- 11. 不使用迭代器已调整大小的矢量
- 12. 如何调整矢量大小(只有行)
- 13. Java矢量调整大小可能会有问题,如在C + +?
- 14. 如何调整Eigen3中的矢量大小
- 15. 矢量调整大小 - 便携式检测方式
- 16. 如何调整结构或类成员的矢量大小?
- 17. 批量调整大小
- 18. 插入并调整矢量的矢量
- 19. 在IE浏览器调整大小与文档大小调整
- 20. 调整火花清单的大小
- 21. 调整大小与ObjectHandles
- 22. LwjglCanvas与JFrame调整大小
- 23. Xcode调整大小与油漆代码生成的矢量形状
- 24. ImageView与矢量绘制大小
- 25. 画布在调整窗口大小时清除
- 26. 清除浏览器CSS缓存通过javascript调整大小
- 27. ExtJS 4 - 调整大小后调整大小后调整大小的内部组件不会调整大小resizeHandles
- 28. 调整大小DIV调整
- 29. C++矢量大小为零
- 30. 查找矢量的大小
你可以尝试这两种方法,并告诉我们如何去? – 2010-04-29 16:23:04
假设你的意思是'resize(0)'? – Roddy 2010-04-29 16:34:55