Index mimo vektor
Co se stane, když se zeptáte na index, na kterém žádný prvek není? Třeba na index 3 ve vektoru se třemi prvky:
std::vector<int> cisla = {10, 20, 30};
std::cout << cisla[3] << std::endl;Program vypíše nějaké nesmyslné číslo, třeba:
44225Hranaté závorky nekontrolují, jestli index patří do vektoru. Program prostě přečte, co v paměti leží za koncem vektoru, podobně jako když vypíšete proměnnou, které jste nedali počáteční hodnotu. Při dalším spuštění to může být jiné číslo, a když je index hodně daleko za koncem, program může i spadnout. Žádná hláška vás přitom na chybu neupozorní, a proto se v programu špatně hledá. Záporné indexy, které možná znáte z jiných jazyků, v C++ nefungují: cisla[-1] je také mimo vektor.
Bezpečnější je metoda at() (anglicky „na“). cisla.at(1) dělá totéž co cisla[1], ale nejdřív zkontroluje index. Když je index mimo vektor, program se zastaví s chybou:
std::vector<int> cisla = {10, 20, 30};
std::cout << cisla.at(1) << std::endl;
std::cout << cisla.at(3) << std::endl;
std::cout << "Konec" << std::endl;Program vypíše 20 a zastaví se. Text Konec se už nevypíše. Místo něj se ve výstupu objeví červená chybová hláška v angličtině, ve které najdete out_of_range, tedy „mimo rozsah“. Hned tak víte, že je problém s indexem, a podle posledního výpisu poznáte, kde se program zastavil.
Pomocí at() můžete prvek i změnit, stejně jako pomocí hranatých závorek: cisla.at(0) = 15;
Hranaté závorky jsou kratší a v programech je uvidíte častěji. Když si nejste jistí, jestli je index správně, použijte at(). Nejlepší ochranou ale je počítat indexy správně: první prvek má index 0 a poslední size() - 1.
Jak psát:
Pokyny
Program má vypsat teplotu z pondělí, prvního dne týdne, a z neděle, posledního dne. Spusťte ho: obě teploty jsou špatně. Nejdřív opravte index u pondělí tak, aby se ve výpisu objevil řádek Pondělí: 18.
U neděle nahraďte teploty[7] zápisem teploty.at(7) a program spusťte. Zastaví se s chybou, protože index 7 je mimo vektor. Potom index v at() opravte: neděle je poslední prvek, a proto má index teploty.size() - 1. Program pak vypíše Neděle: 20.
Začněte programovat zdarma
5/10