2016-10-18 2 views
-2

Я пытаюсь изменить вектор на C++. Проблема в том, что когда я распечатываю «обратный» вектор, я получаю исходный вектор. Я знаю, что чего-то не хватает. Могу ли я получить несколько советов относительно того, что нужно думать. Я googled и увидел, что большинство людей используют тот же метод. Единственное, о чем я могу думать, это то, что у вектора inputBinary есть проблемы с его указателями. Когда я распечатываю *begin(inputBinary), я получаю 1, но *end(inputBinary) дает что-то вроде 14743.Обращение с вектором в C++ не работает

#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

'end' дает вам итератор в один конец, если вы хотите увидеть первый и последний элементы вектора, используйте' .front() 'и' .back() 'соответственно –

+0

Что такое вывод ? Что вы ожидаете от вывода? – Arunas

+4

Пробовал ли вы распечатать вектор * до того, как он изменил его, чтобы увидеть, действительно ли проблема реверсирует его или что-то еще? Как неправильное ожидание результата вашей функции 'convert2Bin'? –

ответ

2

Обратите внимание, что вы вставляете биты в обратном порядке при преобразовании из целого в двоичный. например. для ввода 8, convert2Bin будет выглядеть как 0,0,0,1. Таким образом, после реверса это даст 1,0,0,0. Итератор end() указывает на пятно сразу после последнего элемента вектора, поэтому неудивительно, что вы получаете произвольное значение, если пытаетесь распечатать *end(vec).

+0

он все еще не работает:/ – DoubleOseven

+0

Что вы подразумеваете под «не работает»? http://ideone.com/XK9SoI – CompuChip

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; 
} 
0

Как указывалось выше, проблема здесь ваша функция, которая преобразует десятичное в двоичное. Это дает вам двоичное представление в обратном порядке. Таким образом, после обращения вспять, что двоичное представление становится правильным, и, следовательно, вы получаете ответ.