STL List
List


包含头文件<list>。
定义:
1 | namespace std { |
顺序容器。不提供随机存取。插入删除操作在任何位置都很快,并且不会使迭代器失效。安全。双向迭代器。
List容器的操作
Create, Copy and Destroy
| Operation | Effect |
|---|---|
| list |
Default constructor; creates an empty list without any elements |
| list |
Copy constructor; creates a new list as a copy of c2 (all elements are copied) |
| list |
Copy constructor; creates a new list as a copy of c2 (all elements are copied) |
| list |
Move constructor; creates a new list, taking the contents of the rvalue rv (since C++11) |
| list |
Move constructor; creates a new list, taking the contents of the rvalue rv (since C++11) |
| list |
Creates a list with n elements created by the default constructor |
| list |
Creates a list initialized with n copies of element elem |
| list |
Creates a list initialized with the elements of the range [beg,end) |
| list |
Creates a list initialized with the elements of initializer list initlist (since C++11) |
| list |
Creates a list initialized with the elements of initializer list initlist (since C++11) |
| c.~list() | Destroys all elements and frees the memory |
Nonmodifying Operations
| Operation | Effect |
|---|---|
| c.empty() | Returns whether the container is empty (equivalent to size()==0 but might be faster) |
| c.size() | Returns the current number of elements |
| c.max_size() | Returns the maximum number of elements possible |
| c1 == c2 | Returns whether c1 is equal to c2 (calls == for the elements) |
| c1 != c2 | Returns whether c1 is not equal to c2 (equivalent to !(c1==c2) ) |
| c1 < c2 | Returns whether c1 is less than c2 |
| c1 > c2 | Returns whether c1 is greater than c2 (equivalent to c2<c1) |
| c1 <= c2 | Returns whether c1 is less than or equal to c2 (equivalent to !(c2<c1) ) |
| c1 >= c2 | Returns whether c1 is greater than or equal to c2 (equivalent to !(c1<c2) ) |
Assignments
| Operation | Effect |
|---|---|
| c = c2 | Assigns all elements of c2 to c |
| c = rv | Move assigns all elements of the rvalue rv to c (since C++11) |
| c = initlist | Assigns all elements of the initializer list initlist to c (since C++11) |
| c.assign(n, elem) | Assigns n copies of element elem |
| c.assign(beg, end) | Assigns the elements of the range [beg,end) |
| c.assign(initlist) | Assigns all the elements of the initializer list initlist |
| c1.swap(c2) | Swaps the data of c1 and c2 |
| swap(c1, c2) | Swaps the data of c1 and c2 |
Element Access
| Operation | Effect |
|---|---|
| c.front() | Returns the first element (no check whether a first element exists) |
| c.back() | Returns the last element (no check whether a last element exists) |
Iterator Functions
Bidirectional Iterator.
| Operation | Effect |
|---|---|
| c.begin() | Returns a bidirectional iterator for the first element |
| c.end() | Returns a bidirectional iterator for the position after the last element |
| c.cbegin() | Returns a constant bidirectional iterator for the first element (since C++11) |
| c.cend() | Returns a constant bidirectional iterator for the position after the last element (since C++11) |
| c.rbegin() | Returns a reverse iterator for the first element of a reverse iteration |
| c.rend() | Returns a reverse iterator for the position after the last element of a reverse iteration |
| c.crbegin() | Returns a constant reverse iterator for the first element of a reverse iteration (since C++11) |
| c.crend() | Returns a constant reverse iterator for the position after the last element of a reverse iteration (since C++11) |
Inserting and Removing Elements
| Operation | Effect |
|---|---|
| c.push_back(elem) | Appends a copy of elem at the end |
| c.pop_back() | Removes the last element (does not return it) |
| c.push_front(elem) | Inserts a copy of elem at the beginning |
| c.pop_front() | Removes the first element (does not return it) |
| c.insert(pos, elem) | Inserts a copy of elem before iterator position pos and returns the position of the new element |
| c.insert(pos, n, elem) | Inserts n copies of elem before iterator position pos and returns the position of the first new element (or pos if there is no new element) |
| c.insert(pos, beg, end) | Inserts a copy of all elements of the range [beg,end) before iterator position pos and returns the position of the first new element (or pos if there is no new element) |
| c.insert(pos, initlist) | Inserts a copy of all elements of the initializer list initlist before iterator position pos and returns the position of the first new element (or pos if there is no new element; since C++11) |
| c.emplace(pos, args…) | Inserts a copy of an element initialized with args before iterator position pos and returns the position of the new element (since C++11) |
| c.emplace_back(args…) | Appends a copy of an element initialized with args at the end (returns nothing; since C++11) |
| c.emplace_front(args…) | Inserts a copy of an element initialized with args at the beginning (returns nothing; since C++11) |
| c.erase(pos) | Removes the element at iterator position pos and returns the position of the next element |
| c.erase(beg, end) | Removes all elements of the range [beg,end) and returns the position of the next element |
| c.remove(val) | Removes all elements with value val |
| c.remove_if(op) | Removes all elements for which op(elem) yields true |
| c.resize(num) | Changes the number of elements to num (if size() grows new elements are created by their default constructor) |
| c.resize(num, elem) | Changes the number of elements to num (if size() grows new elements are copies of elem) |
| c.clear() | Removes all elements (empties the container) |
Splice Functions and Functions to Change the Order of Elements

| Operation | Effect |
|---|---|
| c.unique() | Removes duplicates of consecutive elements with the same value |
| c.unique(op) | Removes duplicates of consecutive elements, for which op() yields true |
| c.splice(pos, c2) | Moves all elements of c2 to c in front of the iterator position pos |
| c.splice(pos, c2, c2pos) | Moves the element at c2pos in c2 in front of pos of list c (c and c2 may be identical) |
| c.splice(pos, c2, c2beg, c2end) | Moves all elements of the range [c2beg,c2end) in c2 in front of pos of list c (c and c2 may be identical) |
| c.sort() | Sorts all elements with operator < c.sort(op) Sorts all elements with op() |
| c.merge(c2) | Assuming that both containers contain the elements sorted, moves all elements of c2 into c so that all elements are merged and still sorted |
| c.merge(c2, op) | Assuming that both containers contain the elements sorted due to the sorting criterion op() , moves all elements of c2 into c so that all elements are merged and still sorted according to op() |
| c.reverse() | Reverses the order of all elements |
使用List的示例
1 | // Examples of Using List |
[1] The C++ Standard Library 2nd Edition