November 27, 2019

Класс 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.