标题:关于容器的size和capacity操作的问题
取消只看楼主
RomyJain
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-9-17
 问题点数:0 回复次数:1 
关于容器的size和capacity操作的问题

在C++ Primer 3E中读到一段:

#include <vector>
#include <iostream>
using namespace std;//这个是我自己加的
int main()
{
vector< int > ivec;
cout << "ivec: size: " << ivec.size()
<< " capacity: " << ivec.capacity() << endl;
for ( int ix = 0; ix < 24; ++ix ) {
ivec.push_back( ix );
cout << "ivec: size: " << ivec.size()
<< " capacity: " << ivec.capacity() << endl;
}
cin.get();//这个是我自己加的
}


运行结果:
ivec: size: 0 capacity: 0
ivec: size: 1 capacity: 1
ivec: size: 2 capacity: 2
ivec: size: 3 capacity: 4
ivec: size: 4 capacity: 4
ivec: size: 5 capacity: 8
ivec: size: 6 capacity: 8
ivec: size: 7 capacity: 8
ivec: size: 8 capacity: 8
ivec: size: 9 capacity: 16
ivec: size: 10 capacity: 16
ivec: size: 11 capacity: 16
ivec: size: 12 capacity: 16
ivec: size: 13 capacity: 16
ivec: size: 14 capacity: 16
ivec: size: 15 capacity: 16
ivec: size: 16 capacity: 16
ivec: size: 17 capacity: 32
ivec: size: 18 capacity: 32
ivec: size: 19 capacity: 32
ivec: size: 20 capacity: 32
ivec: size: 21 capacity: 32
ivec: size: 22 capacity: 32
ivec: size: 23 capacity: 32
ivec: size: 24 capacity: 32

此书的下文:
Rogue Wave 实现版本下在ivec 的定义之后它的长度和容量都是0 但是在插入
第一个元素之后ivec 的容量是256 长度为1 这意味着在ivec 下一次需要增长之前我
们可以向它加入256 个元素
当我们插入第256 个元素时vector 以下列方式重新自我增长
它分配双倍于当前容量的存储区把当前的值拷贝到新分配的内存中井释放原来的内存
正如稍后我们将要看到的同list 相比数据类型越大越复杂则vector 的效率也就越低

我的问题是:
1. 什么是Rogue Wave 版本?
2. 为什么在我的机器上运行的结果,capacity不是256呢?

谢谢大家的宝贵时间!

[此贴子已经被作者于2006-9-19 12:57:05编辑过]

搜索更多相关主题的帖子: capacity ivec size 容器 
2006-09-19 01:10
RomyJain
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-9-17
得分:0 
以下是引用corrupt在2006-9-19 8:31:21的发言:
Rogue Wave 实现版本?? 没听说过...
vector当空间不够时 新分配实际大小是 原来大小的2倍...(sgl stl 版本)


最想了解的就是这个“原来”的大小,初始化时的容量大小一般默认的都是0吗?谢谢。

[此贴子已经被作者于2006-9-23 1:32:44编辑过]

2006-09-23 01:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-91130-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.148449 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved