目录
5、增删查改(insert、erase、pop_back、pop_front)
前言
- list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。
- list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。
- list 与 forward_list 非常相似:最主要的不同在于 forward_list 是单链表,只能朝前迭代,已让其更简单高效。
- 与其他的序列式容器相比(array,vector,deque),list 通常在任意位置进行插入、移除元素的执行效率更好。
- 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问.
一、list 的使用
1、构造函数
构造函数 | 接口说明 |
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 |
int main()
{
// 默认构造
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(4);
// 拷贝构造
list<int> lt2(lt);
// 构造 n 个节点
list<int> lt3(5, 1);
// 迭代器区间构造
list<int> lt4(lt.begin(), lt.end());
return 0;
}
2、迭代器
函数声明 | 接口说明 |
begin + end | 返回第一个元素的迭代器+返回最后一个元素下一个位置的迭代器 |
rbegin + rend | 返回第一个元素的reverse_iterator,即end位置,返回最后一个元素下一个位置的 reverse_iterator,即begin位置 |
int main()
{
int a[] = { 1,2,3,4,5,6,7,8,9 };
list<int> lt(a, a + 9);
auto it = lt.begin();
while (it != lt.end())
{
cout << *it << " ";
it++;
}
cout << endl;
return 0;
}
迭代器一般是用来遍历和查找的;
而反向迭代器的使用是类似的,只不过调用的函数换成了 rbegin 和 rend 。
注意:反向迭代器的迭代使用的也是++。但迭代器区间一样是[rbegin, rend);
3、增删查改
函数声明 | 接口说明 |
push_front | 在list首元素前插入值为 val 的元素 |
pop_front | 删除 list 中第一个元素 |
push_back | 在list尾部插入值为 val 的元素 |
pop_back | 删除 list 中最后一个元素 |
insert | 在list position 位置中插入值为 val 的元素 |
erase | 删除list position 位置的元素 |
swap | 交换两个 list 中的元素 |
clear | 清空 list 中的有效元素 |
int main()
{
vector<int> v = { 1,2,3,4,5,6,7,8,9 };
list<int> lt(v.begin(), v.end());
for (auto e : lt) cout << e << " ";
cout << endl;
lt.push_front(10);
lt.push_back(20);
for (auto e : lt) cout << e << " ";
cout << endl;
lt.pop_front();
lt.pop_back();
for (auto e : lt) cout << e << " ";
cout << endl;
auto pos = find(lt.begin(), lt.end(), 5);
lt.insert(pos, 50);
for (auto e : lt) cout << e << " ";
cout << endl;
pos = find(lt.begin(), lt.end(), 8);
lt.erase(pos);
for (auto e : lt) cout << e << " ";
cout << endl;
return 0;
}
4、其他函数使用
函数声明 | 接口说明 |
empty | 检测 list 是否为空,是返回 true ,否则返回 false |
size | 返回 list 中有效节点的个数 |
f |