读书人

用vector给一个动态数组赋值出现有关问

发布时间: 2013-08-10 21:14:06 作者: rapoo

用vector给一个动态数组赋值出现问题
新建个vector对象,键盘输入赋值,然后动态申请个数组,用 之前vector给他赋值,代码如下

#include<iostream>
#include<vector>

using namespace std;

int main(){
vector<int> ivec;
int iva;
while(cin>> iva){
ivec.push_back(iva);
}
cout<<"the original data:\n";
for(vector<int>::size_type ind=0; ind != ivec.size();ind++){
cout<<ivec[ind]<<" ";
}
int *ptr=new int[ivec.size()];
int *ptr2=ptr;
for(vector<int>::const_iterator it=ivec.begin(); it !=ivec.end(); ++it,++ptr2){
*ptr2=*it;
//cout<<*ptr;
//ptr++;
}
cout<<"\nvalue ptr by copying ivec\n";
/*for(vector<int>::size_type ind=0; ind != ivec.size();ind++){
cout<<ptr[ind]<<" ";
}*/
delete []ptr;
return 0;
}

如果没有int *ptr2=ptr;这条语句间接实现的话,程序就卡在那里不走了,vs2012下编译的,
求大神!!!!!
[解决办法]

int *ptr=new int[ivec.size()];
int *ptr2=ptr;
for(vector<int>::const_iterator it=ivec.begin(); it !=ivec.end(); ++it,++ptr2){
*ptr2=*it; //这里的赋值操作,你把地址都改变了哦,而且是自己分配的地址
//这样后引起后面的释放出问题的
//cout<<*ptr;
//ptr++;
}


换这样试试:

int i= 0;
for(vector<int>::const_iterator it=ivec.begin(); it !=ivec.end(); ++it,++i)
ptr2[i] =*it


[解决办法]
引用:
我的意思是 如果没有int *ptr2=ptr;这条语句,即直接*ptr=*it,那么在运行的时候程序会卡在那里不动,如果加上这条语句,就不会出现这种问题,这是为什么

Quote: 引用:


int *ptr=new int[ivec.size()];


int *ptr2=ptr;
for(vector<int>::const_iterator it=ivec.begin(); it !=ivec.end(); ++it,++ptr2){
*ptr2=*it; //这里的赋值操作,你把地址都改变了哦,而且是自己分配的地址
//这样后引起后面的释放出问题的
//cout<<*ptr;
//ptr++;
}



换这样试试:

int i= 0;
for(vector<int>::const_iterator it=ivec.begin(); it !=ivec.end(); ++it,++i)
ptr2[i] =*it

我的意思是 如果没有int *ptr2=ptr;这条语句,即直接*ptr=*it,那么在运行的时候程序会卡在那里不动,如果加上这条语句,就不会出现这种问题,这是为什么,谢谢!


应该是这样操作修改了你分配堆空间的首地址导致出现问题的吧!


不加 int *ptr2=ptr;
你直接用 ptr[i] = *it;
i++;

试试

读书人网 >C++

热点推荐