我定义的反向函数不是打印结果

Reverse function defined by me is not printing the result

本文关键字:打印 结果 函数 定义      更新时间:2023-10-16

在int main((函数中,如果我使用声明vector b未打印结果。如果我删除向量B,则打印了预期的结果。为什么矢量B的存在阻碍了反向功能的打印?

i擦除向量B,然后打印了预期的结果。矢量B的存在阻碍了反向函数的打印

#include <iostream>
#include <vector>
using namespace std;
int reverse(vector<int> a, int s, int e) {
    while(s < e) {
        int temp = a[s];
        a[s] = a[e - 1];
        a[e - 1] = temp;
        s++;
        e--;
    }
    for(int i = 0; i < a.size(); i++) {
        cout << a[i] << " ";
    }
}
int main() {
    vector<int> a;
    a.push_back(1);
    a.push_back(3);
    a.push_back(5);
    a.push_back(7);
    a.push_back(9);
    vector<vector<int>> b;
    b[0].push_back(0);
    b[0].push_back(2);
    b[1].push_back(0);
    b[1].push_back(3);
    reverse(a, 0, 5);
}

预期结果:9 7 5 3 1
没有错误消息,但是预期的结果未打印。

您的推b[0].push_back(0);是"非法"。b没有元素0。在此之后,由于访问范围而具有未定义的行为。

您可以通过创建包含2个默认构造的vector<int> S

b来修复它
vector<vector<int>> b(2);

或通过添加默认构造的 vector<int>时:

vector<vector<int>> b;
b.emplace_back();
b.back().push_back(0);
b.back().push_back(2);
b.emplace_back();
b.back().push_back(0);
b.back().push_back(3);

或通过准备临时vector<int>然后进入b

vector<vector<int>> b;
vector<int> tmp;
tmp.push_back(0);
tmp.push_back(2);
b.emplace_back(std::move(tmp));
tmp.clear();
tmp.push_back(0);
tmp.push_back(3);
b.emplace_back(std::move(tmp));
tmp.clear();