首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

迭代器失灵,reserve的使用

2013-07-04 
迭代器失效,reserve的使用为什么我用了reserve分配了足够的空间,结果还是不对呢。#include vector#includ

迭代器失效,reserve的使用
为什么我用了reserve分配了足够的空间,结果还是不对呢。
#include <vector>
#include <iostream>
using namespace std; 
int main( )
{
     
   vector<int>v1;
   v1.reserve(20);
   
   v1.push_back( 10 );
   v1.push_back( 20 );
   v1.push_back( 30 );
   v1.push_back(40);
   v1.push_back(50);
   v1.push_back(60);
   cout << "v1 =";                                        //打印原数组
   for (vector<int>::iterator Iter = v1.begin(); Iter != v1.end(); ++Iter)
      cout << " " << *Iter;
   cout << endl;
   
   v1.insert( v1.begin()+1, v1.begin()+2, v1.begin()+5 );//插入新数据。程序1中区间为(v1.begin( )+2, v1.begin( )+4 ),唯一的不同。

   cout << "v1 =";
   for (Iter = v1.begin(); Iter != v1.end(); ++Iter )
      cout << " " << *Iter;
   cout << endl;
   return 0;
}
上面程序在vc6.0下编译的结果是:
v1=10 20 30 40 50 60
v1=10 30 40 20 20 30 40 50 60
第二个为什么不是v1=10 30 40 50 20 30 40 50 60呢
不用reserve的结果反而是v1=10 30 40 50 20 30 40 50 60
请高人指点。

Iterator
[解决办法]
看下C++ Primer的相关章节,大概在第11章
[解决办法]
感觉我还不知道你在说什么,我得到的结果都是v1=10 30 40 50 20 30 40 50 60
[解决办法]
掌握insert的几个常用参数形式,记住STL的区间是左闭右开,其余的再错就是自己的问题了,没明白你问的是什么
[解决办法]
push_back会使容器增长的
[解决办法]
确实如此,我也不知道怎么回事。
[解决办法]
vc6.0不标准
[解决办法]
楼主害我看了半天源码,大概是这么回事,你事先分配了足够的内存,所以插入的时候计算顺序不是你想的那样,而如果不事先分配内存,需要重新申请内存这样顺序反而对了,可能像楼上说的那样,VC6.0不标准吧,
右键insert看一下源码。

热点排行