vc6.0 下关于vector的建议(reserve())
来源:互联网 发布:程序员计算器 编辑:程序博客网 时间:2024/06/05 08:22
在看STL标准库时,作者曾说,STL中vector几乎以一种哲学的方式管理其容量的大小,所以在谈到分期摊坏的复杂度时,几乎是可以不考虑的。但在vc6.0中则不然(vc6.0对STL不完美支持是总所周知的)。代码如下:
int main(){std::vector<Person> coll;//coll.reserve(100);coll.push_back(Person("test"));coll.push_back(Person("word"));coll.push_back(Person("rule"));coll.push_back(Person("map"));coll.push_back(Person("set"));coll.push_back(Person("vector"));coll.push_back(Person("list"));coll.push_back(Person("deque"));coll.push_back(Person("michael"));return 0; }
在Person类中,构造函数调用输出字符“2”,拷贝构造调用输出字符“123”,析构输出“~person”和参数。终端结果如下:
2
123
~person
test
2
123
123
~person
test
~person
word
2
123
123
123
~person
test
~person
word
~person
rule
2
123
~person
map
2
123
123
123
123
123
~person
test
~person
word
~person
rule
~person
map
~person
set
2
123
~person
vector
2
123
~person
list
2
123
~person
deque
2
123
123
123
123
123
123
123
123
123
~person
test
~person
word
~person
rule
~person
map
~person
set
~person
vector
~person
list
~person
deque
~person
michael
2
123
~person
many
148 ms
~person
test
~person
word
~person
rule
~person
map
~person
set
~person
vector
~person
list
~person
deque
~person
michael
~person
many
Press any key to continue
从结果可以看出,每push_back一次,vector的中内容就需重新拷贝一次,vetor所能容纳的元素数量编译器没做优化。
将代码中的第二行屏蔽取消,结果如下:
2
123
~person
test
2
123
~person
word
2
123
~person
rule
2
123
~person
map
2
123
~person
set
2
123
~person
vector
2
123
~person
list
2
123
~person
deque
2
123
~person
michael
2
123
~person
many
48 ms
~person
test
~person
word
~person
rule
~person
map
~person
set
~person
vector
~person
list
~person
deque
~person
michael
~person
many
Press any key to continue
此时对vector容纳元素能力进行设定,没有出现大量的拷贝,故vc6.0下建议vetor声明后即调用reserve();设置,否则插入元素的代价是巨大的。
- vc6.0 下关于vector的建议(reserve())
- vs2010下关于vector和动态数组的效率区别
- linux下关于socket程序的调试(gdb)
- Android下关于消息的推送(9.10)
- Linux下关于互斥锁及同步的移植(一)
- Linux下关于互斥锁及同步的移植(二)
- linux下关于网络配置(永久性的)
- vector的reserve(),resize(),capacity()
- C++中vector和string的reserve用法(转载)
- (2)webrtc下关于peerconnection文件夹
- STL vector中的reserve()方法(15)
- vector的reserve和resize
- vector的reserve和resize
- vector的reserve和resize
- vector的reserve和resize
- vector的reserve和resize
- vector的reserve和resize
- vector的reserve和resize
- QT4.5.3编译的一些错误
- Solr ok status:413, message:FULL head
- 在MAC上安装leo editor
- HTML笔记1 - 编辑器、基本概念以及基础结构
- Oracle EBS中的“客户”、"客户地点"、‘订单’之间的关系
- vc6.0 下关于vector的建议(reserve())
- 机试教程 11
- winform壁纸工具:为图片添加当月的日历并设为壁纸
- spring+datasource @Annotation方式
- Hoj 1999 Data Manager
- dwr的使用
- const用法详解
- android之intent的Flag详解
- [Andriod官方训练教程]创建你的第一个App之创建一个简单的用户界面