标题:关于容器的size和capacity操作的问题
只看楼主
RomyJain
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-9-17
 问题点数:0 回复次数:4 
关于容器的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
corrupt
Rank: 2
等 级:新手上路
威 望:3
帖 子:535
专家分:0
注 册:2004-9-29
得分:0 
Rogue Wave 实现版本?? 没听说过...
vector当空间不够时 新分配实际大小是 原来大小的2倍...(sgl stl 版本)

2006-09-19 08:31
corrupt
Rank: 2
等 级:新手上路
威 望:3
帖 子:535
专家分:0
注 册:2004-9-29
得分:0 
当然开始如果为 0 ,那么是先变为1

2006-09-19 08:35
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
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 

容器都有构造函数的啊!

explicit vector(const A& al = A());
explicit vector(size_type n, const T& v = T(), const A& al = A());
vector(const vector& x);
vector(const_iterator first, const_iterator last,
const A& al = A());

list也是如此。
由于你声明时估计只是vector<int>ivec;
那么A就取了默认的allocator<int>
也就是说typedef A allocator<int>;

那么构造函数会是第一个:explicit vector(allocator<int> a);


The first constructor specifies an empty initial controlled sequence. //所以为0
The second constructor specifies a repetition of n elements of value x.
The third constructor specifies a copy of the sequence controlled by x.
The last constructor specifies the sequence [first, last).


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-09-23 09:40



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




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

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