Робота з векторами (масивами) STL

У бібліотеці STL масиви змінної довжини представлені класом vector, який надає доступ до елементів будь-якого типу (правда, тільки до одного типу в одному обєкті vector) послідовно або випадковим доступом Такі обєкти використовуються у вашому додатку усюди, де б ви зазвичай писали оголошення масиву елементів цього типу Наприклад, якби вам потрібно було зберігати 100 цілих чисел, то у вашій програмі могло б бути такий вислів:

int nItems [100]

Однак, цей вираз схильне до помилок Що, якщо пізніше ви зрозумієте, що вам насправді потрібно зберігати 200 елементів Ви можете використовувати виділений блок памяті, наприклад так:

int *pnItems = new int [100]

Тоді, якщо вам буде потрібно більший масив, ви можете зробити що-небудь подібне: delete pnItems

pnItems = new int [nSomeNewSize]

Проблема тут у тому, що коли ви видаляєте всі ці елементи, то ви втрачаєте значення, які вони містили Як альтернативу, ви можете повернутися до старих функцій malloc і free в стилі мови C:

int *pnItems = (int *)malloc (100 * sizeof(int) )

Тоді перерозподіл елементів можливо за допомогою функції realloc: int * pnItems = realloc (pnItems, nSomeNewSize * sizeof (int))

У цьому підході теж є проблеми По-перше, вам треба не забути включити розмір цілого при виділенні памяті По-друге, немає способу визначити, чи були звільнені елементи І нарешті, зручніше працювати з new і delete, ніж з malloc і free Всі ці причини досить серйозні, так що STL містить повну шаблонну реалізацію масиву в класі vector У попередньому прикладі ми б замінили опис масиву наступним виразом:

vector&ltint&gt nItems

Це виділяє змінний масив цілих Для додавання елементів в масив використовуйте метод

insert:

nItemsinsert (nItemsend(), 12 )

Це вираз додасть значення 12 в кінець масиву Якщо ви вже встановили значення, то ви можете звертатися до нього для читання або запису, використовуючи оператор [] Наприклад, уявіть, що у нас були такі вираження, що встановлюють значення елементів масиву:

nItemsinsert (nItemsend(), 1 ) nItemsinsert (nItemsend(), 2 ) nItemsinsert (nItemsend(), 3 ) nItemsinsert (nItemsend(), 4 )

Це встановлює чотири елементи масиву в значення від 1 до 4 Тоді ми можемо змінити третій елемент масиву, використовуючи оператор [] та індекс елемента (починаючи з 0):

nItems[2] = 5 count &lt&lt nItems[2]

Два попередні вираження присвоять третього елементу масиву значення 5 і потім виведуть (у стандартний вихідний потік) значення цього елемента Цей приклад надрукує значення 5

У табл 52 наведені найбільш важливі методи класуvector  разом із поясненням, що ці методи роблять

Таблиця 52 Важливі методи класу vector

Додає дані в масив

Повертає поточне кількість елементів у масиві

Дає доступ до елемента масиву за його індексом для читання або запису

Копіює один масив в інший

Те ж, що і operator []

Повертає початок масиву

Повертає кінець масиву

Повертає виділений розмір масиву Може відрізнятися від size, якщо є резерв

Виділяє память під фіксований число елементів, яке може бути змінено під час виконання

Вказує, містить (FALSE) чи ні (TRUE) масив елементи

Видаляє елементи з масиву

Допоміжна функція, яка вважає кількість елементів даного типу в масиві

Повертає максимально можливий розмір для масиву Зазвичай це кількість вільної

памяті масиву Зазвичай це кількість вільної памяті

Дозволяє двом масивам швидко і ефективно обмінятися даними

Змінює розмір масиву на нове задане число елементів, з необовязковим параметром для ініціалізації початкових значень

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*