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

Создание и инициализация string

Класс stringподдерживает следующие конструкторы и методы инициализации строк:

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

class std::basic_string

{

public:

explicit basic_string(const A& a = A());

basic_string(const basic_string& s, size_type pos = 0,

size_type n = npos, const A& a = A());

basic_string(const Ch* p, size_type n, const A& a = A());

basic_string(const Ch* p, const A& a = A());

basic_string(size_type n, Ch c, const A& a = A());

template<class In>

basic_string(In begin, In end, const A& a = A());

~basic_string(, const A& a = A());

static const size_type npos;

};

Таким образом, строку можно инициализировать другой строкой, подстрокой строки, С-строкой, массивом символов, последовательностью одинаковых символов, или последовательность символов перечисляемых итераторами. Определена специальная константу npos, которая обозначает максимально возможное количество символов, однако ее можно использовать только если в качестве инициализатора используетсяstring

// пустая строка

string s1;

// строка инициализированная С строкой

string s2(“Simple C-string”);

// строка инициализированная массивом символов

char char_array[] = {‘C’,’h’,’a’,’r’,’a’,’c’,’t’,’e’,’r’,

’ ’,’a’,’r’,’r’,’a’,’y’};

// используя весь массив

string s3(char_array,15);

// используя часть массива

string s4(char_array+10,3); // s4 содержит «arr»

// Строка инициализируется другой строкой

string s5(s2);

// Подстрокой

string s6(s2,1,4); // s6 содержит “impl”

string s7(s2,7,npos); // s7 содержит “C-string”, в данном случае

// npos используется для, чтобы указать все символы

// начиная с 7-ого

// Строка инициализируется копиями символа

string s8(10,”A”); // s8 содержит “AAAAAAAAAA”

string s9(1,”B”); // s8 содержит “B”

// Инициализация строки послед символов заданной с помощью итераторов

vector<chat> vec;

vec.bush_back(‘H’);

vec.bush_back(‘e’);

vec.bush_back(‘l’);

vec.bush_back(‘l’);

vec.bush_back(‘o’);

string s10(vec.begin(),vec.end()); // s10 содержит “Hello”

Помимо конструкторов определены следующие операции присваивания и методы инициализации строк:

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

class std::basic_string

{

public:

basic_string& operator=(const basic_string& str);

basic_string& operator=(const Ch* p);

basic_string& operator=(Ch c);

basic_string& assign(const basic_string& str);

basic_string& assign(const basic_string& str, size_type pos,

size_type n);

basic_string& assign(const Ch* p);

basic_string& assign(const Ch* p, size_type n);

basic_string& assign(size_type n, Ch c);

template<class In>

basic_string& assign(In begin, in end);

}

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

Обращение к элементам строки

Обращение к элементам строки может быть осуществлено с помощью следующих методов:

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

class std::basic_string

{

public:

// доступ без проверки диапазона

reference operator[] (size_type n);

const_reference operator[] (size_type n) const;

// доступ с проверкой диапазона индекса

reference at (size_type n);

const_reference at (size_type n) const;

}

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

Важно отметить, что stringможет содержать внутри себя символ с кодом 0, который в данном случаене является маркером окончания строки. Это особенно необходимо учитывать, преобразуяstringв С-строку (см. секцию «Взаимодействиеstringи С-строк»), так как в этом случае нулевой символ может быть принят функциями обработки С-строк как символ терминатор.

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