#include<iostream>
#include<vector>
#include<string>
#include<string>
#include<cstring>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main()
{
vector<int> numbers;
int number;
cout<<"请输入vector数组:" ;
while(cin>>number){
numbers.push_back(number);
//cin.get()检测换行终止输入。
if(cin.get()=="\n")
break;
}
int *a = new int[numbers.size()];
int *pa = a;
for(vector<int>::iterator ivec=numbers.begin();
ivec != numbers.end(); ++ivec,++pa)
*pa=*ivec;
cout<<"复制后的数组为:";
for(size_t i=0; i<numbers.size()-1;i++)
cout<<pa[i]<<" "<<endl;
delete [] a;
return 0;
}
这个是代码,输出的数组是乱码,找不到原因。
解决方案
20
应该输出 a[i] 而不是pa[i] ,原因是循环后 pa 不再指向申请的首地址了
通常会将
通常会将
int *pa = a; for(vector<int>::iterator ivec=numbers.begin(); ivec != numbers.end(); ++ivec,++pa) *pa=*ivec;
这样的代码封装到一个函数里(即 std::copy ),这样就不容易出现误用变量的错误了
40
++pa后,要让pa重新指回a的首地址
输出的次数应该是numbers.size()次,不用-1
输出的次数应该是numbers.size()次,不用-1
#include<iostream>
#include<vector>
#include<string>
#include<string>
#include<cstring>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main()
{
vector<int> numbers;
int number;
cout<<"请输入vector数组:" ;
while(cin>>number){
numbers.push_back(number);
//cin.get()检测换行终止输入。
if(cin.get()=="\n")
break;
}
int *a = new int[numbers.size()];
int *pa = a;
for(vector<int>::iterator ivec=numbers.begin();
ivec != numbers.end(); ++ivec,++pa)
*pa=*ivec;
pa = a;
cout<<"复制后的数组为:";
for(size_t i=0; i<numbers.size();i++)
cout<<pa[i]<<" "<<endl;
delete [] a;
return 0;
}