请问VECTOR问题

znboy 2004-04-28 02:50:32
大家都知道vector是动态分配内存空间,那么我声明一个vector容器的话,他的内部机制是怎样的呢?也就是说给我要分配多大的初始化内存空间呢???
...全文
85 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjmzs 2004-09-25
  • 打赏
  • 举报
回复
STL版本不同的话,VECTOR的初始化的机制是不同的,

据个简单的例子,《C++ Primer》上面说的是: int 类型 初插入后的容量是256

结果我用dev c++一小段代码测试出来却不是这样的,在我的这个版本的STL,VECTOR是按照2的n次幂增长的,既是2,4,8,16,32,64,128,256......超过当前容量时则划分一块2倍大当前容量的内存,拷贝原来的数据过来,销毁原内存......

你可以运行下面代码试一试就知道你的STL是怎么自动增长的了:

////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char *argv[])
{
vector<int> myVec;

//myVec.reserve(200); //你可以试着用reserve看看:)

cout << "myVec:size " << myVec.size() << " capacity :" << myVec.capacity() << endl;

for (int i = 0;i<=500;++i) //改变i试试
{
myVec.push_back(i);
}

vector<int>::iterator myIter = myVec.begin();

while(myIter != myVec.end())
{
cout << *myIter << endl;
myIter++;
}
cout << "myVec Now:size " << myVec.size() << " capacity :" << myVec.capacity() << endl;

return 0;
}
smiledcf 2004-04-29
  • 打赏
  • 举报
回复

要想了解STL内部机制,可以参考一下候捷著的《STL源码剖析》,用的是HP的STL
hsz8250 2004-04-28
  • 打赏
  • 举报
回复
这每个版本的VECTOR的实现都不同,如果你想知道就好去看看代码~那你就清楚啦~
holyfair 2004-04-28
  • 打赏
  • 举报
回复
vector 的定义是需要指定元素参数类型的
所以声明一个vector容器时,容器内元素的vector的元素也会是已知的
如 vector <vector <int> > dd;仍然按照vector的内存生成和扩张方法来实现.
只是这种扩充有了些近似于二维性质
EricZhuo 2004-04-28
  • 打赏
  • 举报
回复
这个你不用管它,而且标准也没规定,不同的实现有不同的做法。
你可以显示的初始化一个vector,指定它的初始大小
goodname 2004-04-28
  • 打赏
  • 举报
回复
请参阅c++ primer

24,856

社区成员

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

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