1、list的介绍
- list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。
- list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。
- list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。
list详解
2、list的使用
2.1 list的构造
构造函数 | 接口说明 |
---|
list (size_type n, const value_type& val = value_type()) | 构造的list中包含n个值为val的元素 |
list() | 构造空的list |
list (const list& x) | 拷贝构造函数 |
list (InputIterator first, InputIterator last) | 用[first, last)区间中的元素构造list |
list<int> l1;
list<int> l2(10, 1);
list<int> l4(l3);
list<int> l3(l2.begin(), l2.end());
2.2 list的iterator
函数 | 接口说明 |
---|
begin()与end() | 返回第一个元素的迭代器+返回最后一个元素下一个位置的迭代器 |
rbegin()与rend() | 返回第一个元素的reverse_iterator,即end位置,返回最后一个元素下一个位置的reverse_iterator,即begin位置 |
list<int> L1(10, 1);
for (list<int>::iterator it = L1.begin(); it != L1.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
for (list<int>::reverse_iterator it = L1.rbegin(); it != L1.rend(); ++it)
{
cout << *it << " ";
}
return 0;
2.3 list的容量
函数 | 接口说明 |
---|
empty | 检测list是否为空,是返回true,否则返回false |
size | 返回list中有效节点的个数 |
2.4 list的修改
函数 | 接口说明 |
---|
push_front | 在list首元素前插入值为x的元素 |
pop_front | 删除list中第一个元素 |
push_back | 在list尾部插入值为val的元素 |
pop_back | 删除list中最后一个元素 |
inster | 在list pos 位置中插入值为x的元素 |
erase | 删除list pos位置的元素 |
L.push_back(2);
L.push_front(2);
L.push_back(2);
L.push_front(2);
cout << "前面和后面加两个2 :";
for (list<int>::iterator it = L.begin(); it != L.end(); ++it)
{
cout << * it << " ";
}
cout << endl;
L.pop_back();
L.pop_front();
cout << "前面和后面各删除一个2 :";
for (list<int>::iterator it = L.begin(); it != L.end(); ++it)
{
cout << *it << " ";
}