定义于头文件 <list>
template< class T, class Allocator = std::allocator<T> > class list; (1)
namespace pmr { template <class T>
using list = std::list<T, std::pmr::polymorphic_allocator<T>>;} (2) (C++17 起)
std::list 是支持常数时间从容器任何位置插入和移除元素的容器。不支持快速随机访问。它通常实现为双向链表。与 std::forward_list 相比,此容器提供双向迭代但在空间上效率稍低。
在 list 内或在数个 list 间添加、移除和移动元素不会非法化迭代器或引用。迭代器仅在对应元素被删除时非法化。
std::list 满足容器 (Container) 、具分配器容器 (AllocatorAwareContainer) 、序列容器 (SequenceContainer) 及可逆容器 (ReversibleContainer) 的要求。
检查容器是否为空
std::list<T,Allocator>::empty
bool empty() const; | (C++11 前) | |
bool empty() const noexcept; | (C++11 起) (C++20 前) | |
[[nodiscard]] bool empty() const noexcept; | (C++20 起) |
检查容器是否无元素,即是否 begin() == end() 。
参数
(无)
返回值
若容器为空则为 true ,否则为 false
复杂度
常数。
调用示例
#include <list>
#include <iostream>
int main()
{
std::list<int> numbers;
std::cout << "Initially, numbers.empty(): " << numbers.empty() << '\n';
numbers.push_back(42);
numbers.push_back(13317);
std::cout << "After adding elements, numbers.empty(): " << numbers.empty() << '\n';
}
输出
返回容纳的元素数
std::list<T,Allocator>::size
size_type size() const; | (C++11 前) | |
size_type size() const noexcept; | (C++11 起) |
返回容器中的元素数,即 std::distance(begin(), end()) 。
参数
(无)
返回值
容器中的元素数量。
复杂度
常数或线性。 | (C++11 前) |
常数。 | (C++11 起) |
调用示例
#include <list>
#include <iostream>
int main()
{
std::list<int> nums {1, 3, 5, 7};
std::cout << "nums contains " << nums.size() << " elements.\n";
}
输出
返回可容纳的最大元素数
std::list<T,Allocator>::max_size
size_type max_size() const; | (C++11 前) | |
size_type max_size() const noexcept; | (C++11 起) |
返回根据系统或库实现限制的容器可保有的元素最大数量,即对于最大容器的 std::distance(begin(), end()) 。
参数
(无)
返回值
元素数量的最大值。
复杂度
常数。
注意
此值通常反映容器大小上的理论极限,至多为 std::numeric_limits<difference_type>::max() 。运行时,可用 RAM 总量可能会限制容器大小到小于 max_size()
的值。
调用示例
#include <iostream>
#include <list>
#include <string>
int main()
{
std::list<char> clist;
std::cout << "Maximum size of a 'char list' is " << clist.max_size() << "\n";
std::list<int> ilist;
std::cout << "Maximum size of a 'int list' is " << ilist.max_size() << "\n";
std::list<double> dlist;
std::cout << "Maximum size of a 'double list' is " << dlist.max_size() << "\n";
std::list<long long> lllist;
std::cout << "Maximum size of a 'long long list' is " << lllist.max_size() << "\n";
std::list<std::string> slist;
std::cout << "Maximum size of a 'std::string list' is " << slist.max_size() << "\n";
}
输出