反转C++中的向量不起作用



我试图在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;
}

如上所述,这里的问题是将十进制转换为二进制的函数。它给出了二进制的倒序表示。因此,颠倒后的二进制表示是正确的,因此你得到的答案。

最新更新