#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; }