在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);
}
Run Code Online (Sandbox Code Playgroud)
预期结果:9 7 5 3 1
无错误消息,但预期结果未打印。
您的推送b[0].push_back(0);是“非法的”。b没有元素0。此后的任何内容由于访问超出限制而具有未定义的行为。
您可以通过创建b包含2个默认构造的vector<int>s 来修复它
vector<vector<int>> b(2);
Run Code Online (Sandbox Code Playgroud)
或通过添加默认构造的结构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);
Run Code Online (Sandbox Code Playgroud)
或准备一个临时住所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();
Run Code Online (Sandbox Code Playgroud)