vector对象复制到数组出现的问题

C++语言 码拜 8年前 (2016-05-06) 1129次浏览
#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

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

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明vector对象复制到数组出现的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)