vs2010 c++ 使用 vector debug模式下出错, release下没错,为什么?
//TestConsole.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include#includeusingnamespacestd...
// TestConsole.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include#includeusing namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
vectorvb;
unsigned char bt[20]= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
vb.assign(bt, bt+20);
vector::iterator it = vb.begin();
it += 10;
vector::iterator it4 = it + 5;
vector::iterator it2 = vb.erase(it, it4);
printf("vb %d \n", vb.size());
printf("%d ", *it2);
getchar();
return 0;
}
vector 后面有<unsigned char>的,可能复制方法不对,没贴出来
在printf("%d ", *it2);这行报错 展开
//
#include "stdafx.h"
#include#includeusing namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
vectorvb;
unsigned char bt[20]= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
vb.assign(bt, bt+20);
vector::iterator it = vb.begin();
it += 10;
vector::iterator it4 = it + 5;
vector::iterator it2 = vb.erase(it, it4);
printf("vb %d \n", vb.size());
printf("%d ", *it2);
getchar();
return 0;
}
vector 后面有<unsigned char>的,可能复制方法不对,没贴出来
在printf("%d ", *it2);这行报错 展开
1个回答
展开全部
感觉主要有2个问题:
(1)vector是要给出它里面存储数据的类型的。也就是说,不能直接用vector声明变量,应该是vector<T>。
(2)assign的用法问题
assign函数主要有以下两种形式:
assign(vector.begin(), vector.end());// 拷贝整个vector
assign(int count, const T t);//用某一类型 t填充该vecotr,size = count
没见你的这种分配方式。
为了保险起见,还是改成for循环
修改如下:
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> vb;
unsigned char bt[20]= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
for(int i=0; i<20; i++)
{
vb.push_back(bt[i]+20);
}
vector<int>::iterator it = vb.begin();
it += 10;
vector<int>::iterator it4 = it + 5;
vector<int>::iterator it2 = vb.erase(it, it4);
printf("vb %d \n", vb.size());
printf("%d ", *it2);
getchar();
return 0;
}
更多追问追答
追问
还是会在debug时报错。
vb.assign(bt, bt+20);应该是可以的,指针也可以作为迭代器使用,类似assign(vector.begin(), vector.end());,意思是从bt数组首地址开始复制20个元素给vb, 在release下运行正常。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询