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:

44225

Hranaté 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.

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

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

5/10