Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/container/forward list/insert after"

From cppreference.com
m (@-@ -> @,@, capitalized 1st letter, .)
 
(6 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{cpp/container/forward_list/title | insert_after}}
+
{{cpp/container/forward_list/title|insert_after}}
 
{{cpp/container/forward_list/navbar}}
 
{{cpp/container/forward_list/navbar}}
 
{{dcl begin}}
 
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
+
{{dcl|num=1|since=c++11|
 
iterator insert_after( const_iterator pos, const T& value );
 
iterator insert_after( const_iterator pos, const T& value );
 
}}
 
}}
{{dcl | num=2 | since=c++11 |
+
{{dcl|num=2|since=c++11|
 
iterator insert_after( const_iterator pos, T&& value );
 
iterator insert_after( const_iterator pos, T&& value );
 
}}
 
}}
{{dcl | num=3 | since=c++11 |
+
{{dcl|num=3|since=c++11|
 
iterator insert_after( const_iterator pos, size_type count, const T& value );
 
iterator insert_after( const_iterator pos, size_type count, const T& value );
 
}}
 
}}
{{dcl | num=4 | since=c++11 |
+
{{dcl|num=4|since=c++11|
 
template< class InputIt >
 
template< class InputIt >
 
iterator insert_after( const_iterator pos, InputIt first, InputIt last );
 
iterator insert_after( const_iterator pos, InputIt first, InputIt last );
 
}}
 
}}
{{dcl | num=5 | since=c++11 |
+
{{dcl|num=5|since=c++11|
 
iterator insert_after( const_iterator pos, std::initializer_list<T> ilist );
 
iterator insert_after( const_iterator pos, std::initializer_list<T> ilist );
 
}}
 
}}
Line 22: Line 22:
 
Inserts elements after the specified position in the container.
 
Inserts elements after the specified position in the container.
  
@1-2@ inserts {{tt|value}} after the element pointed to by {{tt|pos}}
+
@1,2@ Inserts {{c|value}} after the element pointed to by {{c|pos}}.
  
@3@ inserts {{tt|count}} copies of the {{tt|value}} after the element pointed to by {{tt|pos}}
+
@3@ Inserts {{c|count}} copies of the {{c|value}} after the element pointed to by {{c|pos}}.
  
@4@ inserts elements from range {{tt|[first, last)}} after the element pointed to by {{tt|pos}}.  
+
@4@ Inserts elements from range {{range|first|last}} after the element pointed to by {{c|pos}}.
The behavior is undefined if {{tt|first}} and {{tt|last}} are iterators into {{c|*this}}.  
+
The behavior is undefined if {{c|first}} and {{c|last}} are iterators into {{c|*this}}.
  
@5@ inserts elements from initializer list {{tt|ilist}}.
+
@5@ Inserts elements from initializer list {{c|ilist}}.
  
 
{{cpp/container/note_iterator_invalidation|forward_list|insert_after}}
 
{{cpp/container/note_iterator_invalidation|forward_list|insert_after}}
Line 35: Line 35:
 
===Parameters===
 
===Parameters===
 
{{par begin}}
 
{{par begin}}
{{par | pos | iterator before which the content will be inserted}}
+
{{par|pos|iterator after which the content will be inserted}}
{{par | value | element value to insert}}
+
{{par|value|element value to insert}}
{{par | count | number of copies to insert}}
+
{{par|count|number of copies to insert}}
{{par | first, last | the range of elements to insert}}
+
{{par|first, last|the range of elements to insert}}
{{par | ilist | initializer list to insert the values from}}
+
{{par|ilist|initializer list to insert the values from}}
 
{{par hreq}}
 
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
+
{{par req named|InputIt|InputIterator}}
{{par end}}  
+
{{par end}}
  
 
===Return value===
 
===Return value===
@1-2@ Iterator to the inserted element.
+
@1,2@ Iterator to the inserted element.
@3@ Iterator to the last element inserted, or {{tt|pos}} if {{c|1=count==0}}.
+
@3@ Iterator to the last element inserted, or {{c|pos}} if {{c|1=count == 0}}.
@4@ Iterator to the last element inserted, or {{tt|pos}} if {{c|1=first==last}}.
+
@4@ Iterator to the last element inserted, or {{c|pos}} if {{c|1=first == last}}.
@5@ Iterator to the last element inserted, or {{tt|pos}} if {{tt|ilist}} is empty.
+
@5@ Iterator to the last element inserted, or {{c|pos}} if {{c|ilist}} is empty.
  
 
===Exceptions===
 
===Exceptions===
If an exception is thrown during {{tt|insert_after}} there are no effects (strong exception guarantee).
+
{{cpp/strong exception safety guarantee|plural=yes}}
  
 
===Complexity===
 
===Complexity===
@1-2@ Constant.
+
@1,2@ Constant.
@3@ Linear in {{c|count}}
+
@3@ Linear in {{c|count}}.
@4@ Linear in {{c|std::distance(first, last)}}
+
@4@ Linear in {{c|std::distance(first, last)}}.
@5@ Linear in {{c|ilist.size()}}
+
@5@ Linear in {{c|ilist.size()}}.
  
 
===Example===
 
===Example===
 
{{example
 
{{example
|code=
+
|code=
#include <forward_list>                                                        
+
#include <forward_list>
#include <string>                                                              
+
#include <iostream>
#include <iostream>                                                            
+
#include <string>
#include <vector>                                                              
+
#include <vector>
 
                                                                                  
 
                                                                                  
template<typename T>                                                           
+
void print(const std::forward_list<int>& list)
std::ostream& operator<<(std::ostream& s, const std::forward_list<T>& v) {    
+
{
     s.put('[');                                                                
+
     std::cout << "list: {";
     char comma[3] = {'\0', ' ', '\0'};                                        
+
     for (char comma[3] = {'\0', ' ', '\0'}; int i : list)
     for (const auto& e : v) {                                                  
+
     {
         s << comma << e;                                                      
+
         std::cout << comma << i;
         comma[0] = ',';                                                        
+
         comma[0] = ',';
     }                                                                          
+
     }
     return s << ']';                                                          
+
     std::cout << "}\n";
}                                                                              
+
}
 
                                                                                  
 
                                                                                  
int main()                                                                    
+
int main()
{                                                                              
+
{
     std::forward_list<std::string> words {"the", "frogurt", "is", "also", "cursed"};
+
     std::forward_list<int> ints{1, 2, 3, 4, 5};
     std::cout << "words: " << words << '\n';                                  
+
     print(ints);
 
                                                                                  
 
                                                                                  
     // insert_after (2)                                                        
+
     // insert_after (2)
     auto beginIt = words.begin();                                              
+
     auto beginIt = ints.begin();
     words.insert_after(beginIt, "strawberry");                                
+
     ints.insert_after(beginIt, -6);
     std::cout << "words: " << words << '\n';                                  
+
     print(ints);
                                                                               
+
 
     // insert_after (3)                                                        
+
     // insert_after (3)
     auto anotherIt = beginIt;                                                  
+
     auto anotherIt = beginIt;
     ++anotherIt;                                                              
+
     ++anotherIt;
     anotherIt = words.insert_after(anotherIt, 2, "strawberry");                
+
     anotherIt = ints.insert_after(anotherIt, 2, -7);
     std::cout << "words: " << words << '\n';                                  
+
     print(ints);
  
 
     // insert_after (4)
 
     // insert_after (4)
     std::vector<std::string> V = { "apple", "banana", "cherry"};              
+
     const std::vector<int> v = {-8, -9, -10};
     anotherIt = words.insert_after(anotherIt, V.begin(), V.end());            
+
     anotherIt = ints.insert_after(anotherIt, v.cbegin(), v.cend());
     std::cout << "words: " << words << '\n';                                  
+
     print(ints);
 
                        
 
                        
     // insert_after (5)                                                        
+
     // insert_after (5)
     words.insert_after(anotherIt, {"jackfruit", "kiwifruit", "lime", "mango"});
+
     ints.insert_after(anotherIt, {-11, -12, -13, -14});
     std::cout << "words: " << words << '\n';                                  
+
     print(ints);
}  
+
}
|output=
+
|output=
words: [the, frogurt, is, also, cursed]
+
list: {1, 2, 3, 4, 5}
words: [the, strawberry, frogurt, is, also, cursed]
+
list: {1, -6, 2, 3, 4, 5}
words: [the, strawberry, strawberry, strawberry, frogurt, is, also, cursed]
+
list: {1, -6, -7, -7, 2, 3, 4, 5}
words: [the, strawberry, strawberry, strawberry, apple, banana, cherry, frogurt, is, also, cursed]
+
list: {1, -6, -7, -7, -8, -9, -10, 2, 3, 4, 5}
words: [the, strawberry, strawberry, strawberry, apple, banana, cherry, jackfruit, kiwifruit, lime, mango, frogurt, is, also, cursed]
+
list: {1, -6, -7, -7, -8, -9, -10, -11, -12, -13, -14, 2, 3, 4, 5}
 
}}
 
}}
  
 
===See also===
 
===See also===
 
{{dsc begin}}
 
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace after | forward_list}}
+
{{dsc inc|cpp/container/dsc emplace after|forward_list}}
{{dsc inc | cpp/container/dsc push_front |forward_list}}
+
{{dsc inc|cpp/container/dsc push_front|forward_list}}
 
{{dsc end}}
 
{{dsc end}}
  
[[de:cpp/container/forward list/insert after]]
+
{{langlinks|de|es|fr|it|ja|pl|pt|ru|zh}}
[[es:cpp/container/forward list/insert after]]
+
[[fr:cpp/container/forward list/insert after]]
+
[[it:cpp/container/forward list/insert after]]
+
[[ja:cpp/container/forward list/insert after]]
+
[[pt:cpp/container/forward list/insert after]]
+
[[ru:cpp/container/forward list/insert after]]
+
[[zh:cpp/container/forward list/insert after]]
+

Latest revision as of 01:22, 30 August 2023

 
 
 
 
iterator insert_after( const_iterator pos, const T& value );
(1) (since C++11)
iterator insert_after( const_iterator pos, T&& value );
(2) (since C++11)
iterator insert_after( const_iterator pos, size_type count, const T& value );
(3) (since C++11)
template< class InputIt >
iterator insert_after( const_iterator pos, InputIt first, InputIt last );
(4) (since C++11)
iterator insert_after( const_iterator pos, std::initializer_list<T> ilist );
(5) (since C++11)

Inserts elements after the specified position in the container.

1,2) Inserts value after the element pointed to by pos.
3) Inserts count copies of the value after the element pointed to by pos.
4) Inserts elements from range [firstlast) after the element pointed to by pos. The behavior is undefined if first and last are iterators into *this.
5) Inserts elements from initializer list ilist.

No iterators or references are invalidated.

Contents

[edit] Parameters

pos - iterator after which the content will be inserted
value - element value to insert
count - number of copies to insert
first, last - the range of elements to insert
ilist - initializer list to insert the values from
Type requirements
-
InputIt must meet the requirements of LegacyInputIterator.

[edit] Return value

1,2) Iterator to the inserted element.
3) Iterator to the last element inserted, or pos if count == 0.
4) Iterator to the last element inserted, or pos if first == last.
5) Iterator to the last element inserted, or pos if ilist is empty.

[edit] Exceptions

If an exception is thrown for any reason, these functions have no effect (strong exception safety guarantee).

[edit] Complexity

1,2) Constant.
3) Linear in count.
4) Linear in std::distance(first, last).
5) Linear in ilist.size().

[edit] Example

#include <forward_list>
#include <iostream>
#include <string>
#include <vector>
 
void print(const std::forward_list<int>& list)
{
    std::cout << "list: {";
    for (char comma[3] = {'\0', ' ', '\0'}; int i : list)
    {
        std::cout << comma << i;
        comma[0] = ',';
    }
    std::cout << "}\n";
}
 
int main()
{
    std::forward_list<int> ints{1, 2, 3, 4, 5};
    print(ints);
 
    // insert_after (2)
    auto beginIt = ints.begin();
    ints.insert_after(beginIt, -6);
    print(ints);
 
    // insert_after (3)
    auto anotherIt = beginIt;
    ++anotherIt;
    anotherIt = ints.insert_after(anotherIt, 2, -7);
    print(ints);
 
    // insert_after (4)
    const std::vector<int> v = {-8, -9, -10};
    anotherIt = ints.insert_after(anotherIt, v.cbegin(), v.cend());
    print(ints);
 
    // insert_after (5)
    ints.insert_after(anotherIt, {-11, -12, -13, -14});
    print(ints);
}

Output:

list: {1, 2, 3, 4, 5}
list: {1, -6, 2, 3, 4, 5}
list: {1, -6, -7, -7, 2, 3, 4, 5}
list: {1, -6, -7, -7, -8, -9, -10, 2, 3, 4, 5}
list: {1, -6, -7, -7, -8, -9, -10, -11, -12, -13, -14, 2, 3, 4, 5}

[edit] See also

constructs elements in-place after an element
(public member function) [edit]
inserts an element to the beginning
(public member function) [edit]