(C++17) | ||||
| Sequence | ||||
(C++11) | ||||
(C++26) | ||||
(C++26) | ||||
(C++11) | ||||
| Associative | ||||
| Unordered associative | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
| Adaptors | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
| Views | ||||
(C++20) | ||||
(C++23) | ||||
| Tables | ||||
| Iterator invalidation | ||||
| Member function table | ||||
| Non-member function table |
| Member functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Non-member functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Deduction guides(C++17) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
forward_list(): forward_list(Allocator()){} | (1) | (constexpr since C++26) |
explicit forward_list(const Allocator& alloc); | (2) | (constexpr since C++26) |
explicit forward_list( size_type count, const Allocator& alloc= Allocator()); | (3) | (constexpr since C++26) |
forward_list( size_type count,const T& value, const Allocator& alloc= Allocator()); | (4) | (constexpr since C++26) |
template<class InputIt> forward_list( InputIt first, InputIt last, | (5) | (constexpr since C++26) |
template<container-compatible-range<T> R> forward_list(std::from_range_t, R&& rg, | (6) | (since C++23) (constexpr since C++26) |
forward_list(const forward_list& other); | (7) | (constexpr since C++26) |
forward_list( forward_list&& other); | (8) | (constexpr since C++26) |
| (9) | ||
forward_list(const forward_list& other,const Allocator& alloc); | (until C++23) | |
forward_list(const forward_list& other, conststd::type_identity_t<Allocator>& alloc); | (since C++23) (constexpr since C++26) | |
| (10) | ||
forward_list( forward_list&& other,const Allocator& alloc); | (until C++23) | |
forward_list( forward_list&& other, conststd::type_identity_t<Allocator>& alloc); | (since C++23) (constexpr since C++26) | |
forward_list(std::initializer_list<T> init, const Allocator& alloc= Allocator()); | (11) | (constexpr since C++26) |
Constructs a newforward_list from a variety of data sources, optionally using a user supplied allocatoralloc.
forward_list with a default-constructed allocator.Allocator is notDefaultConstructible, the behavior is undefined.forward_list with the given allocatoralloc.forward_list withcount default-inserted objects ofT. No copies are made.forward_list withcount copies of elements with valuevalue.forward_list with the contents of the range[first, last). Each iterator in[first, last) is dereferenced exactly once.InputIt satisfies the requirements ofLegacyInputIterator.forward_list with the contents of the rangerg. Each iterator inrg is dereferenced exactly once.forward_list with the contents ofother. The allocator is obtained as if by callingstd::allocator_traits<Allocator>::select_on_container_copy_constructionforward_list with the contents ofother. The allocator is obtained by move construction fromother.get_allocator().Contents |
| alloc | - | allocator to use for all memory allocations of this container |
| count | - | the size of the container |
| value | - | the value to initialize elements of the container with |
| first, last | - | the pair of iterators defining the sourcerange of elements to copy |
| other | - | another container to be used as source to initialize the elements of the container with |
| init | - | initializer list to initialize the elements of the container with |
| rg | - | a container compatible range |
Calls toAllocator::allocate may throw.
After container move construction (overload(8)), references, pointers, and iterators (other than the end iterator) toother remain valid, but refer to elements that are now in*this. The current standard makes this guarantee via the blanket statement in[container.reqmts]/67, and a more direct guarantee is under consideration viaLWG issue 2321.
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges | 202202L | (C++23) | Ranges-aware construction and insertion; overload(6) |
#include <forward_list>#include <iostream>#include <string> template<typename T>std::ostream& operator<<(std::ostream& s,conststd::forward_list<T>& v){ s.put('{');for(char comma[]{'\0',' ','\0'};constauto& e: v) s<< comma<< e, comma[0]=',';return s<<"}\n";} int main(){// C++11 initializer list syntax:std::forward_list<std::string> words1{"the","frogurt","is","also","cursed"};std::cout<<"1: "<< words1; // words2 == words1std::forward_list<std::string> words2(words1.begin(), words1.end());std::cout<<"2: "<< words2; // words3 == words1std::forward_list<std::string> words3(words1);std::cout<<"3: "<< words3; // words4 is {"Mo", "Mo", "Mo", "Mo", "Mo"}std::forward_list<std::string> words4(5,"Mo");std::cout<<"4: "<< words4; constauto rg={"cat","cow","crow"};#ifdef __cpp_lib_containers_rangesstd::forward_list<std::string> words5(std::from_range, rg);// overload (6)#elsestd::forward_list<std::string> words5(rg.begin(), rg.end());// overload (5)#endifstd::cout<<"5: "<< words5;}
Output:
1: {the, frogurt, is, also, cursed}2: {the, frogurt, is, also, cursed}3: {the, frogurt, is, also, cursed}4: {Mo, Mo, Mo, Mo, Mo}5: {cat, cow, crow}The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2193 | C++11 | the default constructor was explicit | made non-explicit |
| LWG 2210 | C++11 | overload(3) did not have an allocator parameter | added the parameter |
| N3346 | C++11 | for overload(3), the elements in the container were value-initialized | they are default-inserted |
| assigns values to the container (public member function)[edit] | |
| assigns values to the container (public member function)[edit] |