Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документ Microsoft Office Word 97 - 2003 (4).doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
540.67 Кб
Скачать

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