C++--List

发布于:2025-07-14 ⋅ 阅读:(24) ⋅ 点赞:(0)

一,引言

list作为C++STL库中非常常见的容器。熟练的掌握list各个函数接口的使用方法和使用逻辑显得十分重要,因此下文将介绍list的主要的用法,注意事项以及测试用例。

二,构造函数

 list初始化分为默认构造,n个数据的构造,迭代器构造,拷贝构造。赋值函数内部调用的也是拷贝构造。具体实例如下:

list<int> s;
list<int> s1(10, 2);
list<int> s2(s1.begin(), s1.end());
list<int> s3;
s3 = s1;

运行结果如下:

三,迭代器

 常用的迭代器有四种,begin指向开始位置的迭代器;end指向最后数据下一个位置的迭代器;rbegin指向最后一个元素位置的反向迭代器。rend指向最后一个元素下一个位置的反向迭代器。

具体例子如下:

list<int> s{ 1,2,3,4,5,6,7,8 };
cout << *s.begin()<<endl;
cout << *s.rbegin() << endl;

测试结果:
 end以及rend迭代器指向的没有数据。这里不进行测试。

四,capacity

 分别计算list容器是否为空,以及 list容器的数据个数。

具体例子如下:

st<int> s{ 1,2,3,4,5,6,7,8 };
	cout << s.empty()<<endl;
	cout << s.size() << endl;

empty容器不为空返回0,为空返回1。

测试结果:

五,元素数据获取

list容器的底层是双向循环链表。不支持数据的随机访问。front返回第一个数据的引用;back返回最后一个数据的引用。

测试用例如下:

list<int> s{ 1,2,3,4,5,6,7,8 };
cout << s.front()<<endl;
cout << s.back() << endl;
s.front() = 10;
s.back() = 20;
for (auto c : s)
{
	cout << c << ' ';
}

 测试结果如下:

返回的引用是可以修改该位置的数值的。

六,修饰符函数

1,assign

assign函数将指定容器赋值给list对象。第一种是迭代器区间;第二种是n个val数据。具体例子如下:

list<int> s{ 2,3,4,5,6,7,8 };
list<int> s1(5,1);
list<int> s2;
s1.assign(s.begin(), s.end());
s2.assign(s.begin(), s.end());
for (auto ch : s1)
{
	cout << ch<<' ';
}
cout << endl;

for (auto ch : s2)
{
	cout << ch << ' ';
}
cout << endl;

原list容器的数据会被assign函数指定的数据替代。 

 测试结果如下:

2,push_front;pop_front;push_back;pop_back

头插,头删;尾插,尾删。

具体示例如下:

list<int> s;
s.push_back(10);
s.push_back(9);
s.push_back(8);
s.push_back(7);
printfs(s);
s.push_front(100);
s.push_front(200);
printfs(s);
s.pop_back();
printfs(s);
s.pop_front();
printfs(s);

测试结果如下:
 printfs函数是打印list容器数据函数。

3,erase

删除指定位置或指定区域的数据。传入迭代器位置或者区间。返回删除下一个位置的迭代器。由于list容器的物理地址并不连续。并不会造成迭代器的失效。具体用例如下:

list<int> s{ 1,2,3,4,5,6,7,8,9 };
auto it = s.begin();
it++;
it = s.erase(it);
printfs(s);
s.erase(it,s.end());
printfs(s);

测试结果如下:

 需要注意的是经过erase之后需要用迭代器变量进行接收。否则原本位置的迭代器就会失效。

4,rsize

调整容器的大小,若容器小于该函数参数,则会对容器进行缩容。若该函数参数大于list容器则会进行扩容,扩容部分填充val值。

具体例子如下:

list<int> s{ 1,2,3,4,5,6,78,0 };
s.resize(5);
printfs(s);
s.resize(10, 5);
printfs(s);

测试结果如下:

5,clear

清除list容器,使得list容器为空。

七,operation

1,splice

1,将x插入到原list的指定位置,并对x进行删除。

2,将x的指定位置的数据插入到list的指定位置,并删除x中这个数据。

3,将x的指定区间的数据插入到list的指定位置,并删除x的区间的数据。

具体例子如下:

list<int> s{ 1,2,3,4,5 };
list<int> s1{ 11,12,13,14 };
list<int> s2{ 100,111,222,444 };
s.splice(s.begin(),s2);
printfs(s);
s.splice(s.begin(), s1, s1.begin());
printfs(s);
s.splice(s.begin(), s1, s1.begin(),s1.end());
printfs(s);

测试结果如下:

2.unique

删除有效容器中多余的多个相同数据,只留下一组。


网站公告

今日签到

点亮在社区的每一天
去签到