Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::list::splice(3)	      C++ Standard Libary	  std::list::splice(3)

NAME
       std::list::splice - std::list::splice

Synopsis
	  void	   splice(     const_iterator	  pos,	  list&	   other    );
       (1)
	  void	  splice(    const_iterator    pos,    list&&	  other	    );
       (2) (since C++11)
	  void	splice(	 const_iterator	pos, list& other, const_iterator it );
       (3)
	  void splice( const_iterator pos,  list&&  other,  const_iterator  it
       (4) (since C++11)
	  );
	  void	    splice(	 const_iterator	     pos,     list&	other,
       (5)
		       const_iterator first, const_iterator last);
	  void	   splice(     const_iterator	  pos,	    list&&	other,
       (6) (since C++11)
		       const_iterator first, const_iterator last );

	  Transfers elements from one list to another.

	  No  elements	are copied or moved, only the internal pointers	of the
       list nodes are
	  re-pointed. No iterators or references become	invalidated, the iter-
       ators to	moved
	  elements remain valid, but now refer into *this, not into other.

	  1,2) Transfers all elements from other into *this. The elements  are
       inserted	before
	  the element pointed to by pos. The container other becomes empty af-
       ter the
	  operation.
	  3,4)	Transfers  the element pointed to by it	from other into	*this.
       The element is
	  inserted before the element pointed to by pos.
	  5,6) Transfers the elements in the range [first,  last)  from	 other
       into *this. The
	  elements are inserted	before the element pointed to by pos.

	  The behavior is undefined if

	    * get_allocator() != other.get_allocator(),
	    * for overloads (1,2), *this and other refer to the	same object,
	    *  for  overloads (3,4), it	is not a dereferenceable iterator into
       other, or
	    * for overloads (5,6),

	    * [first, last) is not a valid range in other, or
	    * pos is in	[first,	last).

Parameters
	  pos	      -	element	before which the content will be inserted
	  other	      -	another	container to transfer the content from
	  it	      -	the element to transfer	from other to *this
	  first, last -	the range of elements to transfer from other to	*this

Return value
	  (none)

Exceptions
	  Throws nothing.

Complexity
	  1-4) Constant.
	  5,6) Constant	if other refers	to the same object as *this, otherwise
       linear in
	  std::distance(first, last).

Example
       // Run this code

	#include <iostream>
	#include <list>

	std::ostream&  operator<<(std::ostream&	 ostr,	const  std::list<int>&
       list)
	{
	    for	(auto& i : list)
		ostr <<	' ' << i;

	    return ostr;
	}

	int main ()
	{
	    std::list<int> list1{1, 2, 3, 4, 5};
	    std::list<int> list2{10, 20, 30, 40, 50};

	    auto it = list1.begin();
	    std::advance(it, 2);

	    list1.splice(it, list2);

	    std::cout << "list1:" << list1 << '\n';
	    std::cout << "list2:" << list2 << '\n';

	    list2.splice(list2.begin(),	list1, it, list1.end());

	    std::cout << "list1:" << list1 << '\n';
	    std::cout << "list2:" << list2 << '\n';
	}

Output:
	list1: 1 2 10 20 30 40 50 3 4 5
	list2:
	list1: 1 2 10 20 30 40 50
	list2: 3 4 5

	  Defect reports

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

	    DR	  Applied to	      Behavior as published		  Cor-
       rect behavior
			     references	and iterators to the moved    they re-
       fer or point to
	  LWG 250 C++98	     element(s)	were all invalidated	      the
								      same el-
       ement(s)	in *this
	  N2525	   C++98      O(1) splicing could not be guaranteed if the be-
       havior is
			     get_allocator()  !=  other.get_allocator()	 unde-
       fined in	this case

See also
	  merge	    merges two sorted lists
		    (public member function)
	  remove    removes elements satisfying	specific criteria
	  remove_if (public member function)

http://cppreference.com		  2024.06.10		  std::list::splice(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::list::splice&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help