不懂矢量 C++

use*_*585 0 c++ vector

#include <iostream>
#include <vector>

using namespace std;

void SaveNumbers(vector<int> numbers);

int main()
{
    vector<int> numbers;
    SaveNumbers(numbers);

    cout << "FROM MAIN FUNCTION:" << endl;

    for(int i = 0; i < 5; i++)
    {
        cout << numbers.at(i) << " ";
    }
    cout << endl;
    return 0;
}

void SaveNumbers(vector<int> numbers)
{
    for(int i = 0; i < 5; i++)
    {
        numbers.push_back(i + 1);
    }
    cout << "FROM FUNCTION: " << endl;
    for(int i = 0; i < 5; i++)
    {
        cout << numbers.at(i) << " ";
    }
    cout << endl;
}

//OUTPUT:
/*
FROM FUNCTION:
1 2 3 4 5
FROM MAIN FUNCTION:
terminate called after throwing an instance of 'std::out_of_range'
*/
Run Code Online (Sandbox Code Playgroud)

当我在 void 函数中使用 vector 时,vector 有内存,我得到了预期的结果。当我在 main 函数中使用 vector 时,程序会导致错误消息。我应该怎么做才能将内存从 void 函数向量传递给主函数向量而不泄漏它。

cig*_*ien 5

SaveNumbers需要采用vectorby 引用,否则调用代码将看不到更改。

void SaveNumbers(vector<int> & numbers);
Run Code Online (Sandbox Code Playgroud)

您可以通过玩具示例看到这一点

void byVal(int n) { n = 42; }

void byRef(int &n) { n = 42; }

int main()
{
  int a = 0;
  byVal(a);
  cout << a; // prints 0
  byRef(a);
  cout << a; // prints 42
}
Run Code Online (Sandbox Code Playgroud)