0

我正在使用下面的代码来反转向量(修改它)。

void revArr(int i, vector<int> arr) {
    int n = arr.size();
    if (i >= n / 2) return;
    swap(arr[i], arr[n-i-1]);
    revArr(i + 1, arr);
}

int main() {
    vector<int> arr = {2, 13, 5, 26, 87, 65, 73};
    revArr(0, arr);
    for (auto i: arr) {
        cout << i << " ";
    }
    cout << "" << endl;
    return 0;
}

执行后,我在控制台上得到不变的向量:
2 13 5 26 87 65 73
为什么向量没有反转?
提前致谢。

4

1 回答 1

0

正如richard-critten所指出的,您将向量的副本传递给revArr该副本而不是原始副本arr如果您希望函数修改传递给它的值,您有两个选择:通过引用传递或通过指针传递。由您决定哪个更适合您的用例,但鉴于您的示例,我认为您希望通过引用传递。此处非常有用的表格可帮助您了解使用哪个以及为什么使用: https: //www.modernescpp.com/index.php/c-core-guidelines-how-to-pass-function-parameters

于 2021-10-03T14:28:48.383 回答