关于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;
改过之后虽在编译时没错误,但在执行时随便输入几个数就有错误了!万分感谢 展开
标准答案是这样的:
#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;
改过之后虽在编译时没错误,但在执行时随便输入几个数就有错误了!万分感谢 展开
3个回答
展开全部
这么改当然赋值的时候是没问题,但是delete[] pia的时候问题就来了,
你前面赋值的过程中,已经把pia的值改变了,delete时,此时的pia已非原来的那个pia,自然出错了
你前面赋值的过程中,已经把pia的值改变了,delete时,此时的pia已非原来的那个pia,自然出错了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那样改是完全可以的啊!!!我g++上可以通过的啊
你随便输入的是什么数啊?不会不是整形吧?
你随便输入的是什么数啊?不会不是整形吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询