【发布时间】:2015-05-13 21:11:43
【问题描述】:
我试图返回一个具有相反顺序的值的向量(例如,我输入一个具有 0、1、2、3、4 的向量,函数返回一个具有 4、3、2、1、0 的向量)。
编译器说:分段错误。
在我的测试中,我观察到我的问题可能出在分配 new2 = ret_vec(numbers); 中,但我不知道发生了什么。
#include <string>
#include <iostream>
#include <vector>
using namespace std;
vector<int> ret_vec(vector<int>n){
vector <int> n2;
for (int i = 0; i< n.size(); ++i){
n2[i] = n[i];
}
return n2;
}
void initializer(int s, vector<int>& n){
for (int i = 0; i< s; ++i){
n.push_back(i);
}
}
void print_vector(vector<int> n){
for (int i = 0; i<n.size(); ++i){
cout << n[i] << " ";
}
}
int main () {
vector <int> numbers;
int size;
cin >> size;
initializer(size,numbers);
vector <int> new2(numbers.size());
cout << "Old ";
print_vector(numbers);
new2 = ret_vec(numbers);
cout << "New ";
print_vector(new2);
return 0;
}
【问题讨论】:
-
ret_vec获取一个向量的副本,尝试复制该副本很长的一段距离(并且不这样做),然后返回该副本的副本。