我试图在c++中反转向量。问题是,当我打印出"反向"向量时,我得到的是原始向量。我知道我错过了什么。你能给我一些建议吗?我在谷歌上搜索过,发现大多数人都用同样的方法。我唯一能想到的是,inputBinary
向量的指针有问题。当我输出*begin(inputBinary)
时,我得到1
但*end(inputBinary)
得到的是14743
。
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
vector<int> convert2Bin(int& n);
int main()
{
int input;
cin >> input;
vector<int> inputBinary = convert2Bin(input);
reverse(begin(inputBinary), end(inputBinary));
for(int i = 0; i<inputBinary.size();i++)
{
cout << inputBinary[i];
}
return 0;
}
vector<int> convert2Bin(int& n)
{
vector<int> v;
int i = 0, x;
while(n != 0)
{
x = n%2;
v.push_back(x);
n = n/2;
}
return v;
}
请注意,在从整数转换为二进制时,您是以相反的顺序插入位的。如。对于输入8,convert2Bin
看起来像0,0,0,1。反转之后会得到1,0,0,0。此外,end()迭代器指向vector的最后一个元素之后的位置,因此,如果您尝试打印*end(vec)
,那么得到任意值也就不足为奇了。
vector<int> convert2Bin(int& n)
{
vector<int> v;
int i = 0, x;
while(n != 0)
{
x = n%2;
v.push_back(x);
n = n/2;
}
return v;
}
这个函数已经反转了位。当你再次对矢量应用反向时,它会使它法线化。
可以使用deque和push front代替push back。之后就可以正常工作了。
或者您可以将函数更改为
vector<int> convert2Bin(int& n)
{
vector<int> v;
int i = 0, x;
while(n != 0)
{
x = n%2;
v.insert(v.begin(),x)
n = n/2;
}
return v;
}
如上所述,这里的问题是将十进制转换为二进制的函数。它给出了二进制的倒序表示。因此,颠倒后的二进制表示是正确的,因此你得到的答案。