Вектор в библиотеке STL — это удобный массив (вернее, структура, аналогичная массиву),
размер которого может изменяться динамически.
Вектор целых чисел A задается таким образом:
vector <int> A;
Аналогично можно задавать векторы любого другого типа.
Вектор поддерживает операцию обращения по индексу A[i], как и обычный массив, но в отличии
от обычного массива размер вектора может меняться. У вектора есть метод size, возвращающий
количество элементов в векторе в настоящий момент.
Есть несколько способов создать вектор (конструкторы вектора):
vector(B), где B — вектор такого же типа. Создает копию вектора B
vector(n), где n — целое число. Создает вектор из n элементов.
vector(n, val) — создает вектор из n элементов, заполненных значением val.
Например:
vector <int> A(10, 179); vector <int> B(A);
создаст вектор A из 10 элементов равных 179, а затем вектор B, являющийся копией вектора A.
Конструкторы можно вызывать явно для создания объектов, например, vector<int>(10, 179) создаст объект
типа vector <int> и вызовет для вновь создаваемого объекта конструктор.
Для изменения размера вектора можно использовать метод resize. Первый его параметр — новый размер вектора,
второй параметр (необязательный, имеет смысл только при увеличении размера вектора) — значение, которым заполняются вновь созданные элементы.
Для добавления нового элемента в конец вектора можно использовать метод push_back(val). Для удаления последнего элемента
из вектора можно использовать метод pop_back().
Из вектора A можно удалить элемент с индексом i при помощи A.erase(A.begin() + i).
Для удаления элементов с i-го (включая) до j-го (не включая) можно использовать
A.erase(A.begin() + i, A.begin() + j). Также можно использовать итератор end(), возвращающий
элемент на конец вектора (фиктивный элемент, следующий за последним). Например, удалить элементы с i-го до конца
можно при помощи A.erase(A.begin() + i, A.end()), а удалить k последних элемента
вектора можно при помощи A.erase(A.end() - k, A.end()). Удаление требует сдвига элементов, поэтому выполняется за линейное
время.
Вставить значения в вектор можно при помощи метода insert. Например, вставить элемент val перед
i-м элементов вектора A можно при помощи A.insert(A.begin() + i, val).
Если же передать в качестве указателя два итератора, то можно вставить весь фрагмент между итераторами.
Например, A.insert(A.begin(), B.begin(), B.end()) вставляет в начало вектора A
все содержимое вектора B.
Более подробно обо всех методах работы с векторами можно прочесть на cppreference.com.
В этом листке мы снова будем работать со строками, активно используя стандартную библиотеку языка C++ STL (Standard template library).
Для ознакомления рекомендуется следующий раздел сайта www.cppreference.com.
Напомним, что строки можно считывать двумя способами: до пробельного символа (пробела,
конца строки, символа табуляции) при помощи конструкции cin >> S, и до конца
строки при помощи функции getline(cin, S).
Со строками можно выполнять следующие арифметические операции:
= - присваивание значения.
+= - добавление в конец строки другой строки или символа.
+ - конкатенация двух строк, конкатенация строки и символа.
==, != - посимвольное сравнение.
<, >, <=, >= - лексикографическое сравнение.
Подробней об операторах для строк читайте здесь.
Строки можно создавать с использованием следующих конструкторов:
string() - конструктор по умолчанию (без параметров) создает пустую строку.
string(string & S) - копия строки S
string(int n, char c) - повторение символа c заданное число n раз.
string(char c) - строка из одного символа c.
string(string & S, int start, int len) - строка, содержащая не более, чем len
символов данной строки S, начиная с символа номер start.
Конструкторы можно вызывать явно, например, так:
S += string(10, 'z');
В этом примере явно вызывается конструктор string для создания строки, состоящей из 10 символов
'z'.
Неявно конструктор вызывается при объявлении строки с указанием дополнительных параметров. Например, так:
string S(10, 'z');
Подробней о конструкторах для строк читайте здесь.
Методом называется функция, которая применяется к объекту, например, строке.
При вызове метода его имя пишется после идентификатора объекта через точку, например,
у объекта типа string есть метод size, возвращающий длину строки.
Если S — это строка, то метод вызывается так: S.size(). Другой пример:
метод substr возвращает подстроку заданной строки:
string S = "Hello, world!"; cout << S.substr(6, 5) << endl;
В данном случае будет выведен текст world.
Вот список полезных методов, применяемых к строкам:
| append | добавляет строку или символы к строке |
| assign | присваивает строке значение строк символов или других строк C++ |
| clear | удаляет все символы из строки |
| compare | сравнивает две строки |
| empty | возвращает true если в строке нет символов |
| erase | удаляет символы из строки |
| find | ищет подстроку в строке |
| find_first_not_of | находит первый символ, отличный от |
| find_first_of | находит первый символ схожий с |
| find_last_not_of | находит последний символ, отличный от |
| find_last_of | находит последний символ, схожий с |
| insert | вставляет символы в строку |
| length | возвращает длину строки |
| npos | специальное значение, означающее «не найдено» или «все оставшиеся символы» |
| push_back | добавляет символ в конец строки |
| replace | заменяет символы в строке |
| resize | меняет размер строки |
| rfind | находит последнее вхождение подстроки |
| size | возвращает количество символов в строке |
| substr | возвращает определённую подстроку |
| swap | меняет две строки содержимым |