c++的list类
本篇将讲述list类中的各种重要和常用函数(begin()、end()、rbegin()、rend()、empty()、size()、front()、back()、push_front()、pop_front()、push_back()、pop_back()、insert()、erase()、resize()、clear()、splice()、remove()、unique()、sort()、reverse())
所有函数使用时应当包含list>。
如果对您有帮助还请多多点赞,要是文章有错误地方还请你在评论区留言指正。
一、list的创建
1.空容器构造函数(默认构造函数)
作用:构造一个没有元素的空容器。
用法:
2.填充构造函数
作用:构造一个包含 n 个元素的容器。每个元素都是 val 的副本。
用法:
list<int> l(5,0);
3.范围构造函数
作用:构造一个容器,其中包含与范围 [first,last] 一样多的元素,每个元素都按相同的顺序从该区域中的相应元素构造。
用法:创建一个list对象l2,初始值与l1中的元素相等。
list<int>l2(l1.begin(), l1.end());
4.复制构造函数
作用:以相同的顺序构造一个容器,其中包含 x 中每个元素的副本。
示例:创建一个list对象l2,其中包含l1中的每个元素。
list<int> l1(5,1);
list<int>l2(l1);
二、list迭代器
list的迭代器是一种双向迭代器,即可以在头部和尾部进行访问
1.begin()和end()
begin()的作用:返回一个迭代器,该迭代器指向列表容器中的第一个元素。请注意,与返回对第一个元素的引用的成员 list::front 不同,此函数返回指向它的双向迭代器。如果容器为空,则不应取消引用返回的迭代器值。
end()的作用:序列末尾之后的元素的迭代器。如果 list 对象是 const 限定的,则该函数返回 const_iterator。否则,它将返回一个迭代器。成员类型 iterator 和 const_iterator 是双向迭代器类型(分别指向 element 和 const 元素)。
用法:将一个list的对象从头到尾遍历一遍。
list<int >l(6, 6);
list<int>::iterator it = l.begin();
for (; it != l.end(); it++)
{
cout << *it << ' ';
}
2.rbegin()和rend()
rbegin()的作用:返回一个反向迭代器,该迭代器指向容器中的最后一个元素(即其反向开头)。反向迭代器向后迭代:增加它们会将它们移向容器的开头。
rend()的作用:返回一个反向迭代器,该迭代器指向列表容器中第一个元素之前的理论元素(被视为其反向端)。list::rbegin 和 list::rend 之间的范围包含容器的所有元素(按相反的顺序)。
用法:将list对象的元素从后往前遍历。
list<int >l;
for (int i = 0; i < 6; i++)
{
l.push_back(i);
}
list<int>::reverse_iterator it = l.rbegin();
for (; it != l.rend(); it++)
{
cout << *it << ' ';
}
三、容量
1.empty()
作用:返回列表容器是否为空(即其大小是否为 0)。此函数不会以任何方式修改容器,非空返回0。
用法:判断l是否为空,是空返回非零的数值。
2.size()
作用:返回列表容器中的元素数。
用法:用size计算l中元素的个数。
list<int >l(4,0);
cout<<l.size();
四、元素访问
1.front()
作用:返回对列表容器中第一个元素的引用。与返回同一元素的迭代器的成员 list::begin 不同,此函数返回直接引用。
list<int>l;
for (int i = 0; i < 6; i++)
{
l.push_back(i);
}
cout << l.front();
2.back()
作用: 返回对列表容器中最后一个元素的引用。与返回此元素之后的迭代器的成员 list::end 不同,此函数返回直接引用。
用法:输出l中的最后一个元素
list<int>l;
for (int i = 0; i < 6; i++)
{
l.push_back(i);
}
cout << l.back();
五、修饰符
1.push_front()和pop_front()
push_front()的作用: 在list对象的头部插入一个元素val。
用法:在l的前面插入一个元素9.
l.push_front(9);
pop_front()的作用:删除list对象的第一个元素。
用法:删除l的第一个元素0。
l.pop_front();
2.push_back()和pop_back()
push_back()的作用:在其当前最后一个元素之后添加新元素val。
用法:在l的尾部不断的插入元素。
list<int>l;
for (int i = 0; i < 6; i++)
{
l.push_back(i);
}
for (auto i : l)
{
cout << i << ' ';
}
pop_back()的作用:删除列表容器中的最后一个元素。
用法:删除l中的最后一个元素5.
l.pop_back();
3.insert()
作用:在指定位置插入一个元素val。
用法:
在第1个元素前面插入一个元素9.
在第一个元素前面插入两个元素7.
在第三个元素前面插入两个元素10.
l.insert(l.begin(), 9);
l.insert(l.begin(),2,7);
auto it = next(l.begin(), 2);
l.insert(it, 2, 10);
4.erase()
作用:删除指定位置或者区域内的元素。
用法:
删除指定位置的元素。
删除指定区间的元素。
auto it = next(l.begin(), 3);
l.erase(it);
auto it = next(l.begin(), 2);
l.erase(it, l.end());
5.resize()
作用:调整容器的大小,使其包含 n 个元素。如果 n 小于当前容器大小,则内容将减少到其前 n 个元素,删除超出此部分的元素(并销毁它们)。如果 n 大于当前容器大小,则通过在末尾插入所需数量的元素来扩展内容,以达到 n 的大小。如果指定了 val ,则新元素将初始化为 val 的副本,否则,它们将进行值初始化。
用法:
将l的大小调整为3.
将l的大小调整为7,并用0填补。
l.resize(3);
l.resize(7,0);
6.clear()
作用: 从列表容器中删除所有元素(已销毁),并保留容器的大小 0。
用法:删除l中的所有元素。
l.clear();
六、操作
1.splice()
作用:将元素从 x 传输到容器中,并将它们插入到相应位置。
用法:从l2的第3个元素后面插入l1的元素。
auto it = next(l2.begin(), 3);
l2.splice(it, l1);
2.remove()
作用:从容器中删除所有比较等于 val 的元素。
用法:将等于3的元素删除。
l.remove(3);
3.unique()
作用:从容器中每个连续的相等元素组中删除除第一个元素之外的所有元素。请注意,只有当元素与紧接在它前面的元素相比相等时,才会从列表容器中删除该元素。
用法:
l.unique();
4.sort()
作用:将其进行排序。
用法:
从小到大排序。
从大到小排序。
l.stor();
l.sort(greater<int>());
5.reverse()
作用:反转列表容器内的值。
用法: 将l反转。
l.reverse();