我试图在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;
}
答案 0 :(得分:2)
请注意,在从整数转换为二进制时,您将以相反的顺序插入位。例如。对于输入8,convert2Bin
看起来像0,0,0,1。因此,在逆转之后它将给出1,0,0,0。此外,end()迭代器指向向量的最后一个元素之后的位置,因此如果您尝试打印*end(vec)
,则获得任意值并不奇怪。
答案 1 :(得分: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;
}
此功能已经反转了这些位。 当你再次对向量应用反向时,它会正常。
您可以使用deque并向前推,而不是向后推。之后它会正常工作。
或者您可以将功能更改为
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;
}
答案 2 :(得分:0)
如上所述,这里的问题是将十进制转换为二进制的函数。它以相反的顺序为您提供二进制表示。因此,在反转之后,二进制表示变得正确,因此您得到了答案。