Класс String
Конструктор string (string && str) noexcept подобен конструктору
копирования в том смысле, что новый объект string является копией объекта str.
Конструктор string (initializer_list<char> il) обеспечивает возможность
списковой инициализации класса string. To есть он делает возможными объявления наподобие следующих:
string piano_man = { 'L ', 'i1, 's ','z','t'}; string comp_lang {'L', 'i1, 's', 'p'};
Один из аспектов класса, который следует знать — доступные для него варианты ввода.
string stuff; cin >> stuff; // чтение слова getline(cin, stuff); // чтение строки с отбрасыванием символа \п
Существует несколько ограничений на длину строки. Первый ограничивающий фактор — максимально допустимая длина строки, задаваемая константой
string: :npos. Обычно она равна максимальному значению типа unsigned int, и на
практике этого хватает для обычного интерактивного ввода. Однако проблемы могут возникнуть при попытке считывания содержимого всего файла в один объект типа string. Второй ограничивающий фактор —размер памяти, доступной программе.
Функция getline (), применяемая к классу string, будет читать данные из
входного потока и сохранять их в объекте string до тех пор, пока не произойдет одно из трех событий.
- Будет достигнут конец файла. В этом случае во входном потоке будет установлен флаг eofbit и обе функции fail () и eof () возвратят значение true.
- Будет достигнут разделительный символ (\п по умолчанию). Этот символ
удаляется из входного потока, но не сохраняется. - Будет прочитано максимально возможное количество символов (меньшее из
значений константы string: :npos и доступного количества байтов памяти).
В этом случае во входном потоке будет установлен флаг failbit и функция
fail () возвратит значение true.
Существуют две функции-члена класса string для определения размера строки — size ( ) и length ( ).
Метод find_first_of( ) отыскивает первое вхождение в строке любого из
символов, переданных в аргументах метода.
int where = snakel.find_first_of("hark");
Интеллектуальный указатель (smart pointer) — это объект класса, который
действует подобно указателю, но обладает дополнительными возможностями.
Если в программе требуется более одного указателя на объект, необходимо выбрать shared_ptr. Если программа не нуждается в нескольких указателях на один и тот же объект, unique_ptr работает вполне успешно. Это хороший вариант для возвращаемого типа функции, которая возвращает указатель на память, выделенную операцией new. Объекты unique_ptr можно сохранять в контейнере STL, если только не требуется вызывать методы или алгоритмы, такие как sort (), которые копируют или присваивают один объект unique_ptr другому.
Объект unique_ptr можно присваивать объекту shared_ptr при соблюдении тех
же условий, при которых один объект unique_ptr допускается присваивать другому — источником должно быть rvalue.