2016-09-08 3 views
1

Я пытаюсь выполнить некоторый код для домашней работы.Итерация над вектором

Он включает (между прочим) итерацию по вектору, и я получаю странный результат.

main.cpp

#include "tp1.hpp" 

int main(int argc, char** argv) { 

    std::vector<uint8_t> signal { 1,2,0,0,1,2,1,0,2,1,2,1,0,0,0,1,2,1 }; 
    std::vector<LZ77Code> code = lz77_encode(signal, 18, 9); 

    return 0; 
} 

tp1.hpp

inline std::vector<LZ77Code> lz77_encode(const std::vector<uint8_t>& vSignal, size_t N, size_t n1) { 

    std::vector<LZ77Code> vCode; 

    std::vector<uint8_t>::const_iterator vSignalIt; //Iterator for the vector in the parameters 

    vSignalIt = vSignal.begin(); 
    while (vSignalIt != vSignal.end()) 
    { 
     std::cout << *vSignalIt << std::endl; 
     vSignalIt++; 
    } 

    return vCode; 
} 

Я получаю это напечатано в консоли в результате:

Не совсем то, что я намеревался, ты угадал. Я сократил код до минимального минимума, потому что прошло некоторое время с тех пор, как я занимался C++, и я чувствую, что делаю тривиальную ошибку. Дайте мне знать, если вам нужно больше деталей.

Спасибо за ваше время!

+1

Не получить то, что вы получаете. У вас должен быть бесконечный цикл, потому что 'vSignalIt' никогда не увеличивается. – vu1p3n0x

+0

Это, я просто забыл ту часть, где я ее увеличиваю. Редактирование прямо сейчас. –

ответ

3

Когда вы пишете uint8_t до cout, он рассматривает его как char. Вам нужно бросить на int.

std::cout << static_cast<int>(*vSignalIt) << std::endl; 
+0

Вот и все, спасибо. –

+0

В общем случае 'uint8_t' может быть или не быть типом символа, поэтому хороший код должен учитывать обе возможности. –

Смежные вопросы