Skip to main content

std::string insert() method

// (1) Non const version only
constexpr basic_string& insert( size_type index, size_type count, CharT ch );

// (2) Non const version only
constexpr basic_string& insert( size_type index, const CharT* s );

// (3) Non const version only
constexpr basic_string& insert( size_type index, const CharT* s, size_type count );

// (4) Non const version only
constexpr basic_string& insert( size_type index, const basic_string& str );

// (5) Non const version only
constexpr basic_string& insert( size_type index, const basic_string& str,
size_type index_str, size_type count = npos );

// (6) Non const version only
constexpr iterator insert( const_iterator pos, CharT ch );

// (7) Non const version only
constexpr iterator insert( const_iterator pos, size_type count, CharT ch );

// (8) Non const version only
template< class InputIt >
constexpr iterator insert( const_iterator pos, InputIt first, InputIt last );

// (9) Non const version only
constexpr iterator insert( const_iterator pos, std::initializer_list<CharT> ilist );

// (10) Non const version only
template< class StringViewLike >
constexpr basic_string& insert( size_type pos, const StringViewLike& t );

// (11) Non const version only
template< class StringViewLike >
constexpr basic_string& insert( size_type index, const StringViewLike& t,
size_type index_str, size_type count = npos );

Inserts characters into the string.

  • (1) Inserts count copies of character ch at the position index.

  • (2) Inserts null-terminated character string pointed to by s at the position index.
    The length of the string is determined by the first null character using Traits::length(s).

  • (3) Inserts the characters in the range [ s, s + count ) at the position index.
    The range can contain null characters.

  • (4) Inserts string str at the position index.

  • (5) Inserts a string, obtained by str.substr(index_str, count) at the position index.

  • (6) Inserts character ch before the character pointed by pos.

  • (7) Inserts count copies of character ch before the element (if any) pointed by pos.

  • (8) Inserts characters from the range [ first, last ) before the element (if any) pointed by pos.
    This overload does not participate in overload resolution if InputIt does not satisfy LegacyInputIterator.  (since C++11)

  • (9) Inserts elements from initializer list ilist before the element (if any) pointed by pos.

  • (10) Implicitly converts t to a string view sv as if by std::basic_string_view<CharT, Traits> sv = t;, then inserts the elements from sv before the element (if any) pointed by pos, as if by insert(pos, sv.data(), sv.size()).

    Overload Resolution

    This overload participates in overload resolution only if std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>> is true and std::is_convertible_v<const StringViewLike&, const CharT*> is false.

  • (11) Implicitly converts t to a string view sv as if by std::basic_string_view<CharT, Traits> sv = t;, then inserts, before the element (if any) pointed by pos, the characters from the subview [ index_str, index_str + count ) of sv.
    If the requested subview lasts past the end of sv, or if count == npos, the resulting subview is [ index_str, sv.size() ).
    If index_str > sv.size(), or if index > size(), std::out_of_range is thrown.

    Overload Resolution

    This overload participates in overload resolution only if std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>> is true and std::is_convertible_v<const StringViewLike&, const CharT*> is false.

Parameters

  • index - position at which the content will be inserted
  • pos - iterator before which the characters will be inserted
  • ch - character to insert
  • count - number of characters to insert
  • s - pointer to the character string to insert
  • str - string to insert
  • first, last - range defining characters to insert
  • index_str - position of the first character in the string str to insert
  • ilist - std::initializer_list to insert the characters from
  • t - object (convertible to std::basic_string_view) to insert the characters from

Type requirements

Return value

  • (1-5, 10-11) *this
  • (6-9)
    An iterator which refers to the copy of the first inserted character.
    pos if no characters were inserted (count == 0 or first == last or ilist.size() == 0).

Complexity

important

This section requires improvement. You can help by editing this doc page.

Exceptions

In all cases, throws std::length_error if size() + ins_count > max_size() where ins_count is the number of characters that will be inserted and may throw any exceptions thrown by Allocator::allocate().

In any case, if an exception is thrown for any reason, this function has no effect (strong exception guarantee).  (since C++11)

Example

Main.cpp
#include <cassert>
#include <iterator>
#include <string>

using namespace std::string_literals;

int main()
{
std::string s = "xmplr";

// insert(size_type index, size_type count, char ch)
s.insert(0, 1, 'E');
assert("Exmplr" == s);

// insert(size_type index, const char* s)
s.insert(2, "e");
assert("Exemplr" == s);

// insert(size_type index, string const& str)
s.insert(6, "a"s);
assert("Exemplar" == s);

// insert(size_type index, string const& str,
// size_type index_str, size_type count)
s.insert(8, " is an example string."s, 0, 14);
assert("Exemplar is an example" == s);

// insert(const_iterator pos, char ch)
s.insert(s.cbegin() + s.find_first_of('n') + 1, ':');
assert("Exemplar is an: example" == s);

// insert(const_iterator pos, size_type count, char ch)
s.insert(s.cbegin() + s.find_first_of(':') + 1, 2, '=');
assert("Exemplar is an:== example" == s);

// insert(const_iterator pos, InputIt first, InputIt last)
{
std::string seq = " string";
s.insert(s.begin() + s.find_last_of('e') + 1,
std::begin(seq), std::end(seq));
assert("Exemplar is an:== example string" == s);
}

// insert(const_iterator pos, std::initializer_list<char>)
s.insert(s.cbegin() + s.find_first_of('g') + 1, { '.' });
assert("Exemplar is an:== example string." == s);
}
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.

std::string insert() method

// (1) Non const version only
constexpr basic_string& insert( size_type index, size_type count, CharT ch );

// (2) Non const version only
constexpr basic_string& insert( size_type index, const CharT* s );

// (3) Non const version only
constexpr basic_string& insert( size_type index, const CharT* s, size_type count );

// (4) Non const version only
constexpr basic_string& insert( size_type index, const basic_string& str );

// (5) Non const version only
constexpr basic_string& insert( size_type index, const basic_string& str,
size_type index_str, size_type count = npos );

// (6) Non const version only
constexpr iterator insert( const_iterator pos, CharT ch );

// (7) Non const version only
constexpr iterator insert( const_iterator pos, size_type count, CharT ch );

// (8) Non const version only
template< class InputIt >
constexpr iterator insert( const_iterator pos, InputIt first, InputIt last );

// (9) Non const version only
constexpr iterator insert( const_iterator pos, std::initializer_list<CharT> ilist );

// (10) Non const version only
template< class StringViewLike >
constexpr basic_string& insert( size_type pos, const StringViewLike& t );

// (11) Non const version only
template< class StringViewLike >
constexpr basic_string& insert( size_type index, const StringViewLike& t,
size_type index_str, size_type count = npos );

Inserts characters into the string.

  • (1) Inserts count copies of character ch at the position index.

  • (2) Inserts null-terminated character string pointed to by s at the position index.
    The length of the string is determined by the first null character using Traits::length(s).

  • (3) Inserts the characters in the range [ s, s + count ) at the position index.
    The range can contain null characters.

  • (4) Inserts string str at the position index.

  • (5) Inserts a string, obtained by str.substr(index_str, count) at the position index.

  • (6) Inserts character ch before the character pointed by pos.

  • (7) Inserts count copies of character ch before the element (if any) pointed by pos.

  • (8) Inserts characters from the range [ first, last ) before the element (if any) pointed by pos.
    This overload does not participate in overload resolution if InputIt does not satisfy LegacyInputIterator.  (since C++11)

  • (9) Inserts elements from initializer list ilist before the element (if any) pointed by pos.

  • (10) Implicitly converts t to a string view sv as if by std::basic_string_view<CharT, Traits> sv = t;, then inserts the elements from sv before the element (if any) pointed by pos, as if by insert(pos, sv.data(), sv.size()).

    Overload Resolution

    This overload participates in overload resolution only if std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>> is true and std::is_convertible_v<const StringViewLike&, const CharT*> is false.

  • (11) Implicitly converts t to a string view sv as if by std::basic_string_view<CharT, Traits> sv = t;, then inserts, before the element (if any) pointed by pos, the characters from the subview [ index_str, index_str + count ) of sv.
    If the requested subview lasts past the end of sv, or if count == npos, the resulting subview is [ index_str, sv.size() ).
    If index_str > sv.size(), or if index > size(), std::out_of_range is thrown.

    Overload Resolution

    This overload participates in overload resolution only if std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>> is true and std::is_convertible_v<const StringViewLike&, const CharT*> is false.

Parameters

  • index - position at which the content will be inserted
  • pos - iterator before which the characters will be inserted
  • ch - character to insert
  • count - number of characters to insert
  • s - pointer to the character string to insert
  • str - string to insert
  • first, last - range defining characters to insert
  • index_str - position of the first character in the string str to insert
  • ilist - std::initializer_list to insert the characters from
  • t - object (convertible to std::basic_string_view) to insert the characters from

Type requirements

Return value

  • (1-5, 10-11) *this
  • (6-9)
    An iterator which refers to the copy of the first inserted character.
    pos if no characters were inserted (count == 0 or first == last or ilist.size() == 0).

Complexity

important

This section requires improvement. You can help by editing this doc page.

Exceptions

In all cases, throws std::length_error if size() + ins_count > max_size() where ins_count is the number of characters that will be inserted and may throw any exceptions thrown by Allocator::allocate().

In any case, if an exception is thrown for any reason, this function has no effect (strong exception guarantee).  (since C++11)

Example

Main.cpp
#include <cassert>
#include <iterator>
#include <string>

using namespace std::string_literals;

int main()
{
std::string s = "xmplr";

// insert(size_type index, size_type count, char ch)
s.insert(0, 1, 'E');
assert("Exmplr" == s);

// insert(size_type index, const char* s)
s.insert(2, "e");
assert("Exemplr" == s);

// insert(size_type index, string const& str)
s.insert(6, "a"s);
assert("Exemplar" == s);

// insert(size_type index, string const& str,
// size_type index_str, size_type count)
s.insert(8, " is an example string."s, 0, 14);
assert("Exemplar is an example" == s);

// insert(const_iterator pos, char ch)
s.insert(s.cbegin() + s.find_first_of('n') + 1, ':');
assert("Exemplar is an: example" == s);

// insert(const_iterator pos, size_type count, char ch)
s.insert(s.cbegin() + s.find_first_of(':') + 1, 2, '=');
assert("Exemplar is an:== example" == s);

// insert(const_iterator pos, InputIt first, InputIt last)
{
std::string seq = " string";
s.insert(s.begin() + s.find_last_of('e') + 1,
std::begin(seq), std::end(seq));
assert("Exemplar is an:== example string" == s);
}

// insert(const_iterator pos, std::initializer_list<char>)
s.insert(s.cbegin() + s.find_first_of('g') + 1, { '.' });
assert("Exemplar is an:== example string." == s);
}
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.