我定义的反向功能未打印结果

时间:2019-07-03 16:12:07

标签: c++

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

我擦除矢量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
没有错误消息,但预期结果没有打印。

1 个答案:

答案 0 :(得分:6)

您的推送b[0].push_back(0);是“非法的”。 b没有元素0。此后由于undefined behaviour而具有access out of bounds

您可以通过创建包含2个默认构造的b的{​​{1}}来解决此问题

vector<int>

,或者在添加时添加默认构造的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