Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итог_Пособие C++.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.03 Mб
Скачать

1.8 Использование типов vector и string

В качестве первого введения в стандартную библиотеку С++ рассмотрим востребованные на практике способы обработки массивов и строк с использованием типов vector и string. В данном разделе мы не ставим целью дать строгое определение таких понятий как классы, методы классов, шаблоны, итераторы и т.д. Вся эта проблематика будет изложена подробно в следующих разделах пособия. Но понять и оценить возможности стандартной библиотеки С++ при работе с массивами и строками можно уже и на этом этапе обучения.

Сначала дадим краткое введение в терминологию, чтобы в дальнейшем называть все понятия своими именами.

Класс – сложный тип данных, определяемый пользователем (разработчиком программы или библиотеки). Элементами класса как сложного типа данных являются переменные и функции. Функции, определённые внутри класса, называются методами класса, а переменные – полями. К методам класса обычно обращаются, используя составное имя:

Имя переменной класса. Имя метода

Шаблонный класс в С++ (его называют также параметризованным типом) служит основой для создания множества классов, которые отличаются только типом своих элементов.

1.8.1 Шаблонный класс vector

Шаблонный класс vector является шаблоном для формирования векторов с конкретными типами элементов. Синтаксис описания рассмотрим на примерах:

vector<int> x; // объявили вектор без указания размеров

vector<int> y(10);// вектор из 10 элементов, инициализированных нулями

vector<int> z(y); // вектор z – копия y

vector<int> z=y; // то же самое: вектор z – копия y

Работать с вектором можно так же, как с обычным массивом, т.е. доступ к элементам осуществляется по их индексам с использованием квадратных скобок. Несколько методов могут оказаться полезными.

push_back(значение) – помещает заданное значение в конец вектора

pop_back() – удаляет последний элемент из вектора

size() – возвращает размер вектора

empty() – проверяет вектор на пустоту

clear() – очищает вектор

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

end() – возвращает указатель на элемент, следующий за последним.

Если использовать метод push_back для заполнения вектора, то никаких проблем с памятью вообще не возникнет – она будет выделяться автоматически по мере необходимости.

В следующем примере вектор заполняется случайными числами с помощью функции random_shuffle, которая выполняет случайное перемешивание последовательности натуральных чисел 1,2,…,n. Затем выполняется сортировка при помощи стандартной функции sort.

// Пример 1.12 – демонстрация шаблонного типа vector

#include <iostream>

#include <vector> // содержит шаблон vector

#include <algorithm> //алгоритмы случ.перемешивания и сортировки

using namespace std;

int main() {

vector<int> v;

int n,i;

cout<<"n=?"; cin>>n;

for (i=0;i<n;i++) {

v.push_back(i+1);// заполнение числами 1,2,3,...,n

cout<<v[i];//к элементам вектора можно обращаться по индексу

} cout<<endl;

// случайное перемешивание

random_shuffle(v.begin(), v.end());

for (i=0;i<v.size();i++) cout<<v[i]; cout<<endl;

// а теперь - сортировка

sort(v.begin(), v.end());

for (i=0;i<v.size();i++) cout<<v[i]; cout<<endl;

system("pause"); return 0;

}

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