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);这行报错
展开
 我来答
yanglei5658
推荐于2016-04-14 · TA获得超过4756个赞
知道大有可为答主
回答量:835
采纳率:100%
帮助的人:524万
展开全部

感觉主要有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下运行正常。
追答

你F5单步调试一下,看看哪里出的问题,我这里运行没有问题。

浙江启扬智能科技有限公司
2023-06-12 广告
Linux 嵌入式系统中,USB 启动模式能够烧写 ARM 的 uboot 的原因主要有以下几个方面:1. USB 启动模式相对于传统的 BIOS 启动模式来说,具有更高的兼容性和灵活性,可以支持更多的硬件设备和操作系统。2. USB 启动... 点击进入详情页
本回答由浙江启扬智能科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式