c++ primer 例子的问题

szsailing 2003-10-16 11:51:24
#include <vector>
#include <iostream>
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;
}
}

在Rogue Wave 实现版本下在ivec 的定义
第一个元素之后ivec 的容量是256 长度为1

===========================================
但是我在机器上编译运行后,结果却是
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

哪位大侠能告诉我为什么和书上说的不一样?
...全文
92 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
williamVII 2003-10-16
  • 打赏
  • 举报
回复
我记得Primer上说过vector具体的实现与编译器相关,
楼主大概没细看吧...

VC的STL:Copyright (c) 1992-2001 by P.J. Plauger. ALL RIGHTS RESERVED.
njSeeWhy 2003-10-16
  • 打赏
  • 举报
回复
这跟STL的实现有关系,vector只保证当capacity不够时会自动扩展其capacity,但不保证其扩展的方式如何。你这里的vector采用的是当capacity不够时,就将原有空间扩展一倍,这是很常见的做法,没有什么好奇怪的。你可以看一下《STL源码剖析》,可以对容器类底层的内存管理方法了解得更清楚些。
szsailing 2003-10-16
  • 打赏
  • 举报
回复
我是在linux 下用g++ 编译的
zoohoo 2003-10-16
  • 打赏
  • 举报
回复
他用的sgi的stl你用的估计是ms的。
nirvana_li 2003-10-16
  • 打赏
  • 举报
回复
vector中的capacity在不够的时候会由编译器自动将其空间扩大一倍,这在你的编译器上面很容易就看出来了,这应该没的问题。而不一定就是256,这要看STL中到底是怎么样实现的,SGI的STL和VC提供的的STL应该在实现上采用了不同的方法。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧