Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_OOP.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
4 Mб
Скачать

2. Контейнер Vector – динамический массив

Вектор – самый популярный контейнер. Это массив объектов, основное и замечательное отличие которого от обычных массивов в том, что память, занимаемая массивом объектов, может меняться при выполнении программы. Для обычных массивов это невозможно: либо память выделяется статически при описании int a[100], либо при выполнении программы a = new int [n], а затем изменяться не может (только освободить память и взять заново). В классе вектор имеется 4 конструктора:

  • vector() – конструктор по умолчанию, пустой вектор;

vector <int> v;

  • vector( кол-во[, знач.]) – количество элементов со значением знач

vector <char> s(10, ’*’);

  • vector( итератор_начала, итератор_конца) – инициализация диапозоном

  • vector(объект_контейнер) – конструктор копирования

vector<char> s1(s);

К элементам вектора можно обращаться по индексу или через итератор (указатель), как и для обычных массивов (a[i] или *(a + i) ).

В классе vector перегружены операции сравнения

== < <= != > >=

и определено 33 ч/функции.

Назовем основные функции:

size( ) – текущий размер массива,

push_back(знач) – поместить значение в конец массива, size() растет,

pop_back( ) – удаляет последний элемент, size() уменьшается,

begin( ) – возвращает итератор начала вектора,

end( ) – возвращает итератор конца вектора,

insert(итератор, значение) – вставляет в массив значение перед элементом, указанным итератором,

erase(итератор) – удаляет элемент, на который указывает итератор, возвращает итератор элемента за удаленным,

clear( ) – удаляет все элементы вектора,

empty( ) – возвращает истину, если вектор пуст, и ложь, если нет.

Заметим, что во всех контейнерах набор перегруженных операций и член-функций практически одинаковый, кроме некоторых специфических для данного класса.

Пример 1. Из созданного массива случайных чисел переписать в другой массив четные числа

#include <iostream.h>

#include <vector.h>

#include <stdlib.h>

#include <conio.h>

void main( )

{ vector <int> v1, v2; // 2 пустых массива

int i,j;

randomize( );

for(i = 0; i < 10; i++)

v1.push_back(random(30)); // поместить в конец – размер растет

cout << "Создан массив:\n";

for(i = 0; i < v1.size( ); i++) // цикл по размеру

cout << v1[i] << ' ';

for(i = 0; i < v1.size( ); i++)

if(v1[i] % 2 == 0) v2.push_back(v1[i]); // добавить в v2 четные

cout << "\nЧетные числа :\n" << v2.size( ) << endl;

for(i = 0; i < v2.size( ); i++) // v2.size( ) – сколько добавили

cout << v2[i] << ' ';

getch( );

}

Пример 2. Из созданного массива случайных чисел удалить нули. Используется итератор.

#include <iostream.h>

#include <vector.h>

#include <stdlib.h>

void main( )

{vector <int> v; int i, j;

randomize( );

for(i = 0; i < 20; i++)

v.push_back(random(5));

cout << "Создан массив:\n";

for(i = 0; i < v.size( ); i++)

cout << v[i] << ' ';

vector <int> :: iterator pv = v.begin( ); // эквивалентно int *pv = v;

while (pv != v.end( ))

{if (*pv == 0)

pv = v.erase(pv); //удалить нуль и сократить массив

else pv++;}

cout << "\n Осталось элементов " << v.size( ) << ":\n";

for(i = 0; i < v.size( ); i++)

cout << v[i] << ' ';

// или используя итератор

/* for(p = v.begin( ); p != v.end( ); p++)

cout << *p << ' ';

*/

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]