home | help
std::basic_string::insert(3)   C++ Standard Libary  std::basic_string::insert(3)

NAME
     std::basic_string::insert - std::basic_string::insert

Synopsis
	basic_string& insert(		 (constexpr
	size_type index, size_type   (1) since
	count, CharT ch );		 C++20)
	basic_string& insert(		 (constexpr
	size_type index, const	     (2) since
	CharT* s );			 C++20)
	basic_string& insert(		 (constexpr
	size_type index, const	     (3) since
	CharT* s, size_type count );	 C++20)
	basic_string& insert(		 (constexpr
	size_type index, const	     (4) since
	basic_string& str );		 C++20)
	basic_string& insert(
	size_type index, const
	basic_string& str,			    (until
						    C++14)
	size_type s_index, size_type
	count );
	basic_string& insert(			    (since
	size_type index, const			    C++14)
	basic_string& str,			    (constexpr
						    since
	size_type s_index, size_type		    C++20)
	count = npos );
	iterator insert( iterator			       (until
	pos, CharT ch );				       C++11)
							       (since
	iterator insert(				       C++11)
	const_iterator pos, CharT ch			       (constexpr
	);						       since
							       C++20)
	void insert( iterator pos,					  (until
	size_type count, CharT ch );					  C++11)
									  (since
	iterator insert(						  C++11)
	const_iterator pos,						  (cons-
     texpr
	size_type count, CharT ch );					  since
									  C++20)
	template< class InputIt >
	void	       insert(		 iterator	    pos,	     (5)
     (until
	InputIt 	       first,		     InputIt		    last
     C++11)
	);
	template<		  class 		InputIt 	       >
     (since
	iterator							 insert(
     C++11)
	const_iterator			      pos,			 InputIt
     (constexpr
	first,		InputIt 	 last	       );		     (6)
     since
										     C++20)
	iterator							 insert(
     (since
	const_iterator		   pos, 				     (7)
     C++11)
	std::initializer_list<CharT>					     (9)
     (constexpr
	ilist								      );
     since
										     C++20)
	template<	 class						     (8)
     (since
	StringViewLike							       >
     C++17)
	basic_string&  insert(						    (10)
     (constexpr
	size_type			   index,			   const
     since
	StringViewLike& 			  t			      );
     C++20)
	template< class
	StringViewLike >
										     (since
	basic_string&							 insert(
     C++17)
	size_type  index,  const					    (11)
     (constexpr
	StringViewLike& 						      t,
     since
										     C++20)

	size_type t_index, 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 posi-
     tion 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(s_index, count) at the posi-
     tion 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, as if by insert(pos - begin(), basic_string(first, last,
	get_allocator())).

	This overload does not participate in  overload  resolution  if  InputIt
     (since C++11)
	does not satisfy LegacyInputIterator.

	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::ba-
     sic_string_view<CharT,
	Traits>  sv  =	t;, then inserts the elements from sv before the element
     (if any)
	pointed by index, as if by insert(index, sv.data(), sv.size()).
	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::ba-
     sic_string_view<CharT,
	Traits>  sv  =	t;, then inserts, before the element (if any) pointed by
     index, the
	characters from the subview [t_index, t_index + count) of sv.
	  * If the requested subview lasts past the end of sv, or  if  count  ==
     npos, the
	    resulting subview is [t_index, sv.size()).
	  *  If  t_index > sv.size(), or if index > size(), std::out_of_range is
     thrown.
	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.

	If pos is not a valid iterator on *this, the behavior is undefined.

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
	s_index     - position of the first character in 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
	t_index     - position of the first character in t to insert

Type requirements
	-
	InputIt must meet the requirements of LegacyInputIterator.

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

Exceptions
	1-4,10) Throws std::out_of_range if index > size().
	5)  Throws  std::out_of_range  if  index  >  size()  or  if  s_index   >
     str.size().
	11)  Throws  std::out_of_range	if  index  >  size()  or  if  t_index  >
     sv.size().

	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.

	In  all  cases,  if std::allocator_traits<Allocator>::allocate throws an
     (since C++20)
	exception, it is rethrown.

	If an exception is thrown for any reason, this function  has  no  effect
     (strong
	exception safety guarantee).

Example
     // Run this code

      #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 s_index, 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);
      }

	Defect reports

	The  following	behavior-changing  defect  reports were applied retroac-
     tively to
	previously published C++ standards.

	   DR	 Applied to	      Behavior as published		 Correct
     behavior
	LWG 7	 C++98	    overload (8) referred to a non-existing   refers  to
     overload (4)
			    overload				      correctly
	LWG  847   C++98       there  was  no exception safety guarantee   added
     strong exception
								      safety
     guarantee
	LWG 2946 C++17	    overload (10) caused ambiguity in some    avoided by
     making it a
			    cases				      template

See also
	insert_range inserts a range of characters
	(C++23)      (public member function)
	append	     appends characters to the end
		     (public member function)
	push_back    appends a character to the end
		     (public member function)

http://cppreference.com 	   2024.06.10	    std::basic_string::insert(3)

home | help