从函数 C++ 返回向量

Posted

技术标签:

【中文标题】从函数 C++ 返回向量【英文标题】:Return vector from a function C++ 【发布时间】: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 获取一个向量的副本,尝试复制该副本很长的一段距离(并且不这样做),然后返回该副本的副本。 【参考方案1】:

我正在尝试以相反的顺序返回一个向量

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

vector<int> reverse_vec(const vector<int>& n)

  vector<int> ret(n.rbegin(), n.rend());
  return ret;

这里,反向迭代器用于构造一个将输入向量的内容反转的向量。或者,如果您想原地反转向量,请使用std::reverse

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

至于你的代码的问题,一个明显的问题是你在这里访问了一个越界的向量:

vector <int> n2; // empty vector

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

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

【讨论】:

【参考方案2】:

在下面的函数中

vector<int> ret_vec(vector<int>n)
    vector <int> n2;

    for (int i = 0; i< n.size(); ++i)
        n2[i] = n[i];
    

    return n2;

你只是复制参数向量的内容。 (我觉得你忘记了参数和它的类型之间的空格)

您也可以像这样颠倒顺序(“手动”颠倒它):

vector<int> ret_vec(vector<int> n)
    vector <int> n2;

    for(int i=n1.size()-1; i<=0; --i) 
     
        n2.push_back(n1[i]);
    

    return n2;

【讨论】:

以上是关于从函数 C++ 返回向量的主要内容,如果未能解决你的问题,请参考以下文章

C++ - 无法从函数返回向量

如何从 C++ 中的函数返回向量?

C++ 从函数调用的多次返回中构建字符串向量的最佳方法

如何在 C++ 中返回从零开始的向量索引

C++ 函数返回一个向量/字符串,但不是一个数组

如何从函数返回向量引用?