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

时间:2016-10-18 05:40:57

标签: 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;
}

3 个答案:

答案 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)

如上所述,这里的问题是将十进制转换为二进制的函数。它以相反的顺序为您提供二进制表示。因此,在反转之后,二进制表示变得正确,因此您得到了答案。