Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Tema_8.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
120 Кб
Скачать
☆

4 Контейнеры list и deque

Список (list) - это последовательность, оптимизированная для вставки и удаления элементов. Однако следующие операции, характерные для списков, доступны и для других последовательностей:

  • insert(p, x) - добавление х перед p;

  • insert(p, n, x) - добавление n копий х перед p;

  • insert(p, first, last) - добавление перед p элементов последовательности, заданной итераторами first и last;

  • erase(p) - удаление элемента в позиции p;

  • erase(first, last) - удаление последовательности, заданной итераторами;

  • clear() - удаление всех элементов.

Контейнер deque - это очередь с двумя концами. Эта последовательность оптимизирована таким образом, что операции с обоими концами эффективны, как в списке, а обращение по индексу приближается по своей эффективности к вектору.

Для контейнеров list и deque имеются операции push_front() - добавление нового первого элемента и pop_front() - удаление первого элемента.

5 Строки стандартной библиотеки

Строки стандартной библиотеки аналогичны векторам, специализированным для работы с последовательностями символов. Для работы со строками необходимо подключить заголовочный файл <string>. Строку можно проинициализировать по умолчанию (пустой строкой), цепочкой символов, другой строкой типа std::string:

string s1;

string s2("a string");

string s3 = "initial value";

string s4(s3);

Можно также, установив размер строки, заполнить ее заданным символом, либо проинициализировать строку другой последовательностью, используя пару итераторов:

string s7(10, '\n');

string s8(aList.begin(), aList.end());

Как и векторы, строки характеризуются логической и физической длиной. Эти величины можно получить с помощью функций-элементов size() и capacity(). Функция-элемент reserve() меняет физическую длину строки. Функция-элемент max_size() возвращает максимальный размер строки, которая может быть размещена в памяти. Функция-элемент length() - синоним функции size().

С помощью функции-элемента resize() изменяется текущая длина строки. Вторым параметром функции можно указать символ, вставляемый в новые позиции.

s7.resize(15, '\t'); // вставка символов табуляции

Функция-элемент empty() возвращает true, если строка не содержит символов.

Доступ к отдельным символам в строке аналогичен доступу к элементам массива:

s = "string";

s[1] = 'p'; // s == "spring"

Строке может быть присвоено значение другой строки, массива символов, или отдельного символа:

s1 = s2;

s2 = "a new value";

s3 = 'x';

Оператор += может быть использован для всех трех форм присваивания.

С помощью функций-элементов assign() и append() можно выделить часть присваиваемой последовательности символов:

s4.assign(s2, 0, 3);// присваивание первых трех символов

s4.append(s5, 2, 3);// добавление символов 2, 3 и 4

Оператор + осуществляет сшивание двух строк. Функция-элемент swap() обменивает содержимое двух строк.

Доступ к символам может быть осуществлен с помощью операции [] или функции at(). Функция at() генерирует исключение out_of_range, если осуществлена попытка получения символа за пределами строки.

Для строк не реализовано их приведение к типу char* по умолчанию. Функция-элемент c_str() возвращает указатель на оканчивающийся нулем массив символов.

Для вставки, удаления и замены символов используются функции-элементы insert(), erase() и replace():

s3.insert(3, "abc"); // вставка abc после позиции 3

s3.erase(4, 2); // удаление позиций 4 и 5

s3.replace(4, 2, "pqr");// замена позиций 4 и 5 на pqr

Функция-элемент copy() копирует в строку символы из указанного диапазона:

// Присваивает s4 позиции от 2 до конца s3:

s3.copy(s4, 2);

// Присваивает s4 позиции от 2 до 4 строки s5 :

s5.copy(s4, 2, 3);

Функция-элемент compare() используется для лексикографического сравнения строк. Необязательные аргументы могут задавать различные исходные позиции для сравнения. Функция возвращает отрицательное значение, если получатель меньше аргумента, ноль, если они равны, и положительное в противном случае.

Чаще используются операции сравнения <, <=, ==, !=, >=, и >, которые также могут использоваться для сравнения с цепочкой символов.

Функция-элемент substr() возвращает строку, являющуюся частью исходной. При этом также задается диапазон индексов:

cout << s4.substr(3); // вывод от позиции 3 до конца

cout << s4.substr(3, 2);// вывод позиций 3 и 4

Функция-элемент find() определяет первое включение аргумента в текущую строку. Необязательный целый аргумент определяет стартовую позицию для поиска Функция возвращает найденную позицию или значение за пределами индекса. Функция rfind() ищет с конца в обратную сторону.

s1 = "mississippi";

cout << s1.find("ss"); // возвращает 2

cout << s1.find("ss", 3); // возвращает 5

cout << s1.rfind("ss"); // возвращает 5

cout << s1.rfind("ss", 4); // возвращает 2

Если подстрока не найдена, возвращается значение, большее длины строки.

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