Шаг 397.
Библиотека STL.
Строение строковых классов. Модифицирующие операции. Вставка символов

    На этом шаге мы перечислим методы, осуществляющие вставку символов в строку.

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

  string& string::insert (size_type idx, const string& str)
Вставляет символы из str так, что новые символы начинаются с индекса idx.

    Возвращает *this.

    Если выполняется условие idx>size(), генерируется исключение out_of_range.

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

  string& string::insert (size_type idx, const string& str, 
        size_type str_idx, size_type str_num)
Вставляет не более str_num символов из str, начиная с индекса str_idx, так, что новые символы начинаются с индекса idx.

    Возвращает *this.

    Если выполняется условие idx>size(), генерируется исключение out_of_range.

    Если выполняется условие str_idx>str.size(), генерируется исключение out_of_ range.

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

  string& string::insert (size_type idx, const char* cstr)
Вставляет символы С-строки cstr так, что новые символы начинаются с индекса idx.

    Возвращает *this.

    Аргумент cstr не должен содержать NULL-указатель.

    Если выполняется условие idx>size(), генерируется исключение out_of_range.

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

  string& string::insert (size_type idx, const char* chars, size_type chars_len)
Вставляет chars_len символов из символьного массива chars так, что новые символы начинаются с индекса idx.

    Возвращает *this.

    Символьный массив chars должен содержать не менее chars_len символов, которые могут иметь произвольные значения (символ \0 не имеет особой интерпретации).

    Если выполняется условие idx>size(), генерируется исключение out_of_range.

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

  string& string::insert (size_type idx, size_type num, char c) 
  void string::insert (iterator pos, size_type num, char c)
Обе формы вставляют num экземпляров символа с в позицию, заданную индексом idx или итератором pos соответственно.

    Первая форма вставляет новые символы так, чтобы они начинались с индекса idx.

    Вторая форма вставляет новые символы перед символом, на который ссылается итератор pos.

    Учтите, что перегрузка этих двух функций приводит к потенциальной неоднозначности. При передаче нуля во втором аргументе значение может интерпретироваться как индекс (обычно преобразование к unsigned) или как итератор (обычно преобразование к char*). Следовательно, в таких ситуациях индекс должен передаваться с точным указанием типа. Пример:

  std::string s;
  .  .  .
  s.insert(0,1,' '); //ОШИБКА: неоднозначность
  s.insert((std::string::size_type)0,1,' '); //OK

    Обе формы возвращают *this.

    Если выполняется условие idx>size(), обе формы генерируют исключение out_of_range.

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

  iterator string::insert (iterator pos, char c)
Вставляет копию символа с перед символом, на который ссылается итератор pos.

    Возвращает позицию вставленного символа.

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

  void string::insert (iterator pos, InputIterator beg, InputIterator end)
Вставляет все символы интервала [beg,end) перед символом, на который ссылается итератор pos.

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

    На следующем шаге мы рассмотрим удаление символов.




Предыдущий шаг Содержание Следующий шаг