
- •10. Конструктором
- •24.Контейнерні класи.
- •Ітератор бібліотеці(iterator)
- •Категорійітераторів
- •Ітераторипримітивів
- •26. Контейнерів - векторі (vector)
- •2. Static_cast (перетворення без перевірки)
- •3. Const_cast (відкидання const або volatile)
- •33. Обробка виключних ситуацій
- •34. Обробка виключних ситуацій
26. Контейнерів - векторі (vector)
Крім масивів у c + + існують ще контейнери, які дозволяють вам трохи по іншому зберігати дані і, на додачу, застосовувати до них різні функції (пошук, сортування і т.д.). Сьогодні ви дізнаєтеся про один з контейнерів - векторі (vector)
Можливо ви вже стикалися з такою проблемою, що масиви в с + + мають обмежений розмір, а ми точно не знаємо кількість елементів, необхідне в масиві. У таких випадках необхідно використовувати динамічне програмування. Тобто виділяти пам'ять під елементи масиву при необхідності додати який-небудь елемент. В принципі, в с + + це можна реалізувати вручну, але навіщо? якщо є спеціальний клас - vector. Він дозволяє створювати нам масиви змінної довжини в залежності від ситуації.
Для створення вектора вам необхідно підключити <vector>. Потім створення вектора майже нічим не відрізняється від створення змінної і / або масиву:
vector <type> name; / / здесть type-тип даних у векторі, а name - ім'я вектора
Для запису у вектор досить набрати ім'я вектора.push_back (що покласти)
vector <int> test;
test.push_back (10);
test.push_back (20);
Звернення до n-ому елементу нічим не відрізняється від звернення до елементу масиву:
test [0] + +;
cout << test [1];
test [1] = 222;
Для видалення останнього елемента вектора використовується функція pop_back ()
test.pop_back ();.
27.Бібліотека роботи з векторами valarrey
В стандартній бібліотеці шаблонів є контейнер vector який може працюючи з будь якими типами. Для математичних підрахунків та обчислюють в бібліотеку був добавлений valarray.
<valarray>
Реалізує шаблон класу std :: valarray - клас масивів, оптимізований для числової обробки.
Крім роботи з масивами valarray можна працювати з тригометричними, математичними алгоритмами . Крім того valarray працює із зрізами(slice).
Зрізи – це механізм колективного маніпулювання елементами масиву.
Зрізи – це абстракція яка дозволяє маніпулювати векторами різної розмірності.
29. У С + + виділені логічно різні види приведення типів. У
сукупності вони дозволяють робити все ті перетворення, які
допускає синтаксис Сі-перетворень, крім одного. За допомогою старого
синтаксису можна було приводити від похідного класу до закритого
базового класу (що небезпечно), новий синтаксис цього не дозволяє.
Сі-приведення типів в С + + повністю підтримується.
2. Static_cast (перетворення без перевірки)
Статичний приведення типів можливо:
1. для покажчиків (посилань) на об'єкти родинних (не обов'язково
поліморфних) класів, що відносяться до однієї ієрархії класів.
2. для вільних покажчиків (void *), які можуть
перетворюватися в значення покажчиків будь-яких типів,
3. для перетворень між арифметичними типами ..
Оператор static_cast дозволяє виконувати перетворення з типу S в тип T,
якщо зворотне перетворення з T в S може бути виконано неявно.
Зауваження: Допустимість перетворення перевіряється на етапі
компіляції. У разі явної неприпустимість (наприклад, перетворення
між покажчиками на неспоріднені класи) відбувається помилка
компіляції.
Якщо покажчик на базовий клас ні налаштований на об'єкт похідного
класу, перетворення з покажчика на базовий клас до вказівником на
похідний клас буде все ж виконано, що робить небезпечним
використання отриманого результату для доступу до даних з
похідного класу.
Зауваження: При перетворенні static_cast константність зберігається, з
його допомогою не можна прибрати атрибут const у виразі.
Приклад:
class Base {...};
class Derived: public Base {...};
Base * bp, b_ob; Derived * dp, d_ob;
bp = & d_ob; / / вказує на об'єкт похідного класу
dp = static_cast <Derived*> (bp); / / OK
dp = static_cast <Derived*> (& b_ob); / / перетворення
небезпечне!
/ / Реально dp вказує на об'єкт базового класу!
Приклад: int i; double d = 3.1415; i = static_cast <int> (d); / / OK