我尝试通过除法和impera算法反转向量。这是我的代码:
#include <iostream>
#include <vector>
using namespace std;
//prototype
void Reverse (std::vector<int> &v, int left, int right);
//helper function
void Switch(int &x, int &y)
{
int aux = x;
x = y;
y = aux;
}
int main()
{
vector <int> v;
int n; cout << "n="; cin >> n;
for (int i = 0; i < n; i++){
cout << "v[" << i <<"]=";
int input;
cin >> input;
v.push_back(input);
}
Reverse(v, 0, v.size()-1);
for (int i = 0; i < n; i++)
cout << v[i] << " ";
return 0;
}
void Reverse (std::vector<int> &v, int left, int right)
{
int mid = (left + right) / 2;
if (left == right + 1){
Switch(v[left], v[right]);
}
else{
Reverse(v, left, mid-1);
Reverse(v, mid, right);
}
}
它可能给我一个无限循环,因为我的程序在编译时永远不会返回,并且会得到不响应的错误。有什么问题吗?是因为我只在基本情况下切换了两个元素,而不是两个完整的向量?
您应该调试程序,而不是要求社区为您修复它。
您似乎已经知道cout的最简单方法是在程序状态下添加更多打印语句。稍后,您可能将学习如何在所选的IDE中使用调试器。