关于c++ primer习题4.28(复制vector对象到动态数组)的问题,望高手不吝赐教

原题是这样的:编写程序由从标准输入读入的元素数据建立一个int型的vector对象,然后动态创建一个与该vector对象大小一致的数组,把vector对象的所有元素复制给... 原题是这样的:编写程序由从标准输入读入的元素数据建立一个int型的vector对象,然后动态创建一个与该vector对象大小一致的数组,把vector对象的所有元素复制给新数组。
标准答案是这样的:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> ivec;
int ival;
cout<<"enter numbers:(ctrl+z to end)"<<endl;
while(cin>>ival)
ivec.push_back(ival);
//.......................................................//
int *pia=new int[ivec.size()];
int *tp=pia;
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter,++tp)
*tp=*iter;
//......................................................//
delete [] pia;
return 0;
}

为什么不能把注释的代码段改为:
int *pia=new int[ivec.size()];
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter,pia++)
*pia=*iter;

改过之后虽在编译时没错误,但在执行时随便输入几个数就有错误了!万分感谢
展开
 我来答
DelRa
2008-10-30 · TA获得超过214个赞
知道小有建树答主
回答量:90
采纳率:0%
帮助的人:170万
展开全部
是输入完几个数之后按了ctrl+z才报的错吧?
你不是把数组头指针给丢了吗?没了那个释放资源的时候当然报错了。
舒拔博士
2008-10-30 · TA获得超过306个赞
知道小有建树答主
回答量:302
采纳率:0%
帮助的人:0
展开全部
这么改当然赋值的时候是没问题,但是delete[] pia的时候问题就来了,
你前面赋值的过程中,已经把pia的值改变了,delete时,此时的pia已非原来的那个pia,自然出错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhujin1314
2008-10-30
知道答主
回答量:14
采纳率:0%
帮助的人:0
展开全部
那样改是完全可以的啊!!!我g++上可以通过的啊
你随便输入的是什么数啊?不会不是整形吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式