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

vector 崩溃有关问题

2012-10-21 
vector 崩溃问题运行下面代码的时候崩溃了...求问为什么...编译器提示在下面黄色的部分出问题了程序的目的

vector 崩溃问题
运行下面代码的时候崩溃了...求问为什么...编译器提示在下面黄色的部分出问题了
程序的目的是,把一个310的向量扩充5倍,然后在扩充后的向量里,每12个取一个..

[code=C/C++][/code]

#include <iostream>
#include <vector>
using namespace std;

const int uInt310 = 310;
const int uInt12 = 12;
const int uInt5 = 5;
typedef vector<int>::iterator VecIntItor;
int main()
{
  vector<int> vecInt;
  vector<int> vecSource;
  vector<int> vecDest;
  for(int i=0; i<uInt310; i++)
  {
  vecInt.push_back(i);
  }
  for(int i=0; i<uInt310; i++)
  {
  for(int i=0; i<uInt5; i++)
  {
  vecSource.push_back(vecInt[i]);
  }
  }
  for(VecIntItor itor=vecSource.begin(); itor!=vecSource.end(); itor+=uInt12 )
  {
  vecDest.push_back(*itor);
  }

  return 0;
}


[解决办法]
无非是越界嘛
[解决办法]
310*5不是12的倍数因此这样写大概是不行的
改成<大概也不行,迭代器不保证后边的一定比前边的小
[解决办法]

C/C++ code
for(vector<int>::size_type index = 0, size = vecSource.size(); index < size; index+=uInt12)    {        vecDest.push_back(vecSource[index]);    }
[解决办法]
迭代器越界,可以这样改:
for (VecIntItor itor=vecSource.begin(); itor<vecSource.end()-uInt12; itor+=uInt12)
{
//...
}

注:对关联式迭代器不适用(它们不支持operator<)。

热点排行