Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
STL5 / lab2-string / lab2-string.doc
Скачиваний:
9
Добавлен:
10.04.2015
Размер:
177.66 Кб
Скачать

Класс string

В языке Cстрока представляет собой символьный массив, заканчивающийся двоичным нулём (так называемыеnull-terminatedстроки). Подобному представлению строк характерны все недостатки встроенных массивов1, а так же необходимость постоянно следить за правильность представления строки: нулевой символ всегда должен заканчивать строку и не должен случайно оказаться в середине строки, так как это будет воспринято как конец строки.

Заменой встроенных массивов элементов любых типов является класс vector, соответственно вместо С-строк может быть использованvector<char>, и в некоторых случаях это имеет смысл. Однако очень часто над строками необходимо выполнять операции несвойственные векторам, такие как конкатенация строк, поиск подстрок, удаление подстрок и т.п.; и нет необходимости выполнять некоторые операции вектора. Также для строк имеет смысл операция сложения (конкатенации), что не имеет смысл для произвольного массива, использование перегруженного оператора сложения позволяет в значительной степени упростить запись некоторых выражений. По этим причинам стандартная библиотека содержит специальный класс для работы со строками -string

Определение класса string

В действительности класс stringявляется синонимом одной из специализаций шаблонаbasic_string, классbasic_stringкак и все средства стандартной библиотеки определен в пространстве именstd, его определение находится в заголовочном файле <string>

template <class Ch, class Tr = char_traits<Ch>, class A = allocator<Ch> >

class std::basic_string

{

}

typedef basic_string<chat> string;

typedef basic_string<wchat_t> wstring;

Шаблон basic_stringимеет следующие параметры:

  1. Ch– тип символов содержащихся в строке. Стандартной библиотекой поддерживаются два типа символов:char–ASCIIсимволы иwchar_t– символы из расширенного набораUnicode. Возможна адаптация шаблонаbasic_stringдля любого другого класса, представляющего символ (например, китайские иероглифы), однако это требует достаточно глубоко знанияSTL.

  2. Tr– класс содержащий свойства символов содержащихся в строке этого типа (в данном случае под свойствами понимается свойства типа используемого в строке для представления символа). Этот параметр поддерживает значение по умолчанию, которое может быть использовано в большинстве случаев2.

  3. A– класс указывающие используемый распределитель памяти3, значение по умолчанию может быть использовано в большинстве случае.

Классы stringиwstringявляются синонима специализаций шаблонаbasic_stringдля простого и расширенного набора символов. Класс строки содержащий символы из простого набора может быть объявлен:

#include <string>

using namespace std;

string MyString;

Экспортируемые типы

Аналогично классу vectorклассstringопределяет следующие типы данных.

template <class Ch, class Tr = char_traits<Ch>, class A = allocator<Ch> >

class std::basic_string

{

public:

typedef Tr traits_type;

typedef typename traits::char_type value_type;

typedef A allocator_type;

typedef typename A::sizetype size_type;

typedef typename A::difference_type difference_type;

typedef implementation_dependent1 iterator;

typedef implementation_dependent2 const_iterator;

typedef std::reverse_iterator<iterator> reverse_iterator;

typedef std::reverse_iterator<const_iterator> const_reverse_iterator;

typedef typename A::pointer pointer;

typedef typename A::const_pointer const_pointer;

typedef typename A::reference reference;

typedef typename A::const_reference const_reference;

}

Имена типов имею тоже самое значение, что и имена типов класса vector.

Соседние файлы в папке lab2-string