首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-08-10 
用vector给一个动态数组赋值出现问题新建个vector对象,键盘输入赋值,然后动态申请个数组,用 之前vector给

用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++;

 试试

热点排行