Из этой статьи вы получите базовые знания о строках, парах и кортежах в STL, прежде чем перейти к более подробным и более широким понятиям, таким как итераторы, алгоритмы и контейнеры.
Хотя строки используются так же, как и в общем языке C++, их стоит обсудить с точки зрения STL. Мы можем представить себе строки как о последовательном контейнере символов. Кроме того, поскольку мы имеем дело с классами шаблонов в STL, совершенно необходимо, чтобы вы знали концепцию PAIR и TUPLE в отношении STL.
Строки в STL
Строки в STL поддерживают как формат ASCII, так и формат Unicode (широкосимвольный).
STL поддерживает два типа строк:
1) string: это строка в формате ASCII, и чтобы включить этот тип строковых объектов в программу, нам нужно включить файл string.h в нашу программу.
#include <string> |
2) wstring: это строка расширенных символов. Чтобы включить объекты wstring в нашу программу, мы подключаем файл xstring.
#include <xstring> |
Будь то ASCII или Unicode, строки в STL поддерживают различные методы точно так же, как и другие контейнеры STL.
Вот некоторые из методов, поддерживаемых строковым объектом:
- begin() : возвращает итератор в начало.
- end() : возвращает итератор в конце.
- insert() : вставляет в строку.
- erase () : удаляет символы из строки.
- size() : возвращает длину строки.
- empty() : очищает содержимое строки.
Давайте напишем простую программу для демонстрации работы строк STL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <string> #include <iostream> using namespace std; int main() { string str1; str1.insert(str1.end(),'W'); str1.insert(str1.end(),'O'); str1.insert(str1.end(),'R'); str1.insert(str1.end(),'L'); str1.insert(str1.end(),'D'); for (string::const_iterator it = str1.begin(); it != str1.end(); ++it) { cout << *it; } int len = str1.size(); cout<<"\nLength of string:"<<len; cout << endl; return (0); } |
Вывод данных:
WORLD Length of string:5 |
В приведенном выше коде, как вы можете видеть, мы объявляем строковый объект str1, а затем с помощью метода вставки добавляем символы один за другим в конец строки. Затем, используя объект итератора, мы отображаем строку.
Далее мы выводим длину строки, используя метод size. Данная программа предназначена только для демонстрации работы строк.
Пары в STL
Класс PAIR в STL удобен при программировании ассоциативных контейнеров. PAIR — это класс шаблонов, который объединяет два значения одного или разных типов данных.
Общий синтаксис:
pair<T1, T2> pair1, pair2; |
Вышеупомянутая строка кода создает две пары, т.е. пара1 и пара2. Обе эти пары имеют первый объект типа T1 и второй объект типа T2.
T1 — первый член, а T2 — второй член пары1 и пары2.
Ниже приведены методы, поддерживаемые классом PAIR:
- оператор (=): присвойте значения паре.
- swap: меняет местами содержимое пары.
- make_pair(): создает и возвращает пару объектов, определенных в списке параметров.
- операторы ( == , != , > , < , <= , >= ) : лексикографически сравнивает две пары.
Давайте напишем простую программу, которая показывает использование этих функций в коде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> using namespace std; int main () { pair<int,int> pair1, pair3; pair<int,string> pair2; pair1 = make_pair(1, 2); pair2 = make_pair(1, "MonitorBankRu"); pair3 = make_pair(2, 4); cout<< "\nPair1 First member: "<<pair1.first << endl; cout<< "\nPair2 Second member:"<<pair2.second << endl; if(pair1 == pair3) cout<< "Pairs are equal" << endl; else cout<< "Pairs are not equal" << endl; return 0; } |
Вывод данных:
Pair1 First member: 1 Pair2 Second member: MonitorBankRu Pairs are not equal |
В приведенной выше программе мы создаем две пары целочисленных типов и еще одну пару целочисленного типа и строки. Затем с помощью функции «make_pair» мы присваиваем значения каждой паре.
Далее мы сравниваем пару1 и пару2, используя оператор «==», чтобы проверить, равны они или нет. Эта программа демонстрирует базовую работу класса PAIR.
Кортежи в STL
Концепция Tuple является расширением Pair. В паре мы можем объединить два разнородных объекта, тогда как в кортеже мы можем объединить три разнородных объекта.
Общий синтаксис кортежа:
tuple<T1, T2, T3>tuple1; |
Так же, как и пара, кортеж также поддерживает аналогичные функции и некоторые дополнительные функции.
Они перечислены ниже:
- Constructor: для создания нового кортежа.
- Tuple_element: возвращает тип элемента кортежа.
- Make_tuple(): создает и возвращает кортеж, содержащий элементы, описанные в списке параметров.
- Операторы ( == , != , > , < , <= , >= ): лексикографически сравнивают две пары.
- Оператор (=): нуден для присвоения значения кортежу.
- Swap: меняет местами значения двух кортежей.
- Tie: привязывает значения кортежа к его ссылкам.
Давайте используем некоторые из этих функций в программе, чтобы увидеть их работу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <iostream> #include <tuple> using namespace std; int main () { tuple<int, int, int> tuple1; tuple<int, string, string> tuple2; tuple1 = make_tuple(1, 2,3); tuple2 = make_tuple(1,"Hello", "C++ Tuples"); int id; string str1, str2; tie(id, str1, str2) = tuple2; cout << id <<" "<< str1 <<" "<< str2; return 0; } |
Вывод данных:
1 Hello C++ Tuples |
В приведенном выше коде для демонстрации кортежей мы создаем два кортежа. Первый кортеж tuple1 состоит из трех целых значений. Второй кортеж, т.е. tuple2, состоит из одного целочисленного значения и двух строковых значений.
Затем мы присваиваем значения обоим кортежам, используя функцию make_tuple. Затем с помощью вызова функции «tie» мы привязываем или присваиваем значения из tuple2 к id и двум строкам.
Наконец, мы выводим эти значения. Вывод показывает значения из tuple2, которые мы присвоили идентификатору, и две строки.
Итог
Таким образом, в этой статье мы кратко обсудили строки, пары и кортежи, используемые в STL. Принимая во внимание, что операции со строками аналогичны обычным C++, значит, мы также можем оперировать итераторами с этими строками.
Конструкции пар и кортежей удобны при программировании контейнеров STL, особенно ассоциативных контейнеров.
В нашей следующей статье мы подробно узнаем об алгоритмах, прежде чем перейти к фактическому программированию с использованием STL.
С Уважением, МониторБанк