c++ - 从函数 C++ 返回 vector

标签 c++ function vector

我试图以相反的顺序返回一个值的 vector (例如,我输入一个包含 0,1,2,3,4 的 vector ,函数返回一个包含 4,3,2,1,0 的 vector ).

编译器说:段错误。

在我的测试中,我观察到我的问题可能出在赋值 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;

}

最佳答案

I am trying to return a vector with the values in the reverse order

最简单的方法是使用 C++:

vector<int> reverse_vec(const vector<int>& n)
{
  vector<int> ret(n.rbegin(), n.rend());
  return ret;
}

在这里,反向迭代器用于构造一个 vector ,其中输入 vector 的内容被反转。或者,如果您想就地反转 vector ,请使用 std::reverse :

vector<int> v = ....
std::reverse(v.begin(), v.end()); // v is now reversed

至于您的代码问题,一个明显的问题是您正在越界访问此处的 vector :

vector <int> n2; // empty vector

for (int i = 0; i< n.size(); ++i){
    n2[i] = n[i]; // oops! n2 accessed out of bounds!
}

解决方法是根本不使用此代码并选择简单选项。

关于c++ - 从函数 C++ 返回 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30225278/

相关文章:

c++ - ZMQ经销商-路由器-经销商模式

c++ - 用 C++ 重写 grep

c++ - 如何将一个空的成对 vector 推回另一个 vector ?

php - 标准正态累积分布函数

r - 如何跨运行应用函数

c++ - map.insert : "Invalid arguments" error with pair<enum, vector <*>>

c++ - 是否可以在 C++ 的结构声明中直接指定函数?

c++ - C++ 中的可变参数模板和逗号分隔的字符串

c++ - 运行时检查失败 #2 变量 'maze' 周围的堆栈已损坏

python - 如何不改变外在值(value)观?