Code::Blocks nie jest konieczne i bez tego program działa
To jest zależne od kompilatora (i biblioteki standardowej), a nie IDE (Code::Blocks na OSX, Windowsie i Linuksie będzie na pewno korzystać z różnych kompilatorów i różnych ich wersji). Uważam że to dość niegroźny (w kontekście maturalnym) błąd merytoryczny
zmienna typu char to tak naprawdę jest po prostu liczba zawierająca kod ASCII przedstawianego znaku
Zdanie od wielkiej litery :P C++ nie gwarantuje użycia ASCII. Owszem, chyba wszędzie się z tym spotkasz (może poza IBM utrzymującym EBCDIC na mainframe'ach), ale formalnie rzecz biorąc - gwarancji nie ma. Natomiast C++ gwarantuje, że wartości od '0'
do '9'
będą kolejnymi wartościami liczbowymi, dlatego zawsze możesz uzyskać wartość cyfry poprzez odjęcie wartości znaku zero.
Wcześniej też ktoś powiedział, że mogłeś się pokusić o range for - też tak uważam, ale w tym przypadku to jeszcze za bardzo nie boli. Jest tak natomiast w C++ z gwiazdką:
for (std::list<int>::iterator it = cyfryLiczbowo.begin(); it != cyfryLiczbowo.end(); it++)
Tego kodu nie przepuściłbym przez code review:
- używasz
std::list
nadaremno. Zasada jest prosta: używaj std::vector
, chyba że masz twarde dowody na to, że std::list
jest lepsze. Spotkałem się z takim przypadkiem raz w życiu, było to w zadaniu na Advent of Code 2019 (taki konkurs)
- jeśli już chcesz używać iteratorów zamiast ranged for - koniecznie użyj
auto
zamiast precyzować typ iteratora.
- nie modyfikujesz nic, użyj
cbegin()
i cend()
warto zauważyć, że jest tam operator *, gdyż samo it jako takie jest wskaźnikiem na element i operator * pozwoli wyłuskać wskazywany w pamięci element.
it
nie jest wskaźnikiem, jest iteratorem, czyli klasą spełniającą kontrakt wskaźnika, ale implementacyjnie absolutnie nim nie jest (nie musi być). Ma po prostu przeładowany operator*
(ciekawostka: dla klas takich jak std::array
czy std::vector
iterator faktycznie może być po prostu wskaźnikiem - ale nie musi)