本人萌新,第一次写博客,如有不对,请各位大佬提出,我将及时改正。。。
本人根据厂长(老师)的要求整理了如下几点:
List章节:
1)List的定义
list是C++标准模版库(STL,Standard Template Library)中的部分内容。实际上,list容器就是一个双向链表,可以高效地进行插入删除元素。
使用list容器之前必须加上<vector>头文件:#include<list>;
list属于std命名域的内容,因此需要通过命名限定:using std::list;也可以直接使用全局的命名空间方式:using namespace std;
3)构造List函数
list<int>a{1,2,3}
list<int>a(n) //声明一个n个元素的列表,每个元素都是0
list<int>a(n, m) //声明一个n个元素的列表,每个元素都是m
list<int>a(first, last) //声明一个列表,其元素的初始值来源于由区间所指定的序列中的元素,first和last是迭代器
2)List的常用函数
1:begin()和end()
通过调用list容器的成员函数begin()得到一个指向容器起始位置的iterator,可以调用list容器的end()函数来得到list末端下一位置
2:push_back()和push_front()
使用list的成员函数push_back和push_front插入一个元素到list中。其中push_back()是从list的末端插入,而push_front()是从list的头部插入。
3:empty()
判断List是否为空。
4:rbegin()和rend()
前者返回逆向链表的第一个元素,即c链表的最后一个数据。后者返回逆向链表的最后一个元素的下一个位置,即c链表的第一个数据再往前的位置。
5:operator=
重载赋值运算符。
6:clear()
清空list中的所有元素
7:front()和back()
通过front()可以获得list容器中的头部元素,通过back()可以获得list容器的最后一个元素。注意:当list元素为空时,这时候调用front()和back()不会报错。因此在编写程序时,最好先调用empty()函数判断list是否为空,再调用front()和back()函数。
8:pop_back()和pop_front()
使用pop_back()可以删掉尾部第一个元素,pop_front()可以删掉头部第一个元素。注意:list必须不为空,如果当list为空的时候调用pop_back()和pop_front()会使程序崩掉。
9:assign()
.assign(n,num) 将n个num拷贝赋值给链表c。
assign(beg,end) 将[beg,end)区间的元素拷贝赋值给链表c。
10:swap()
交换两个链表。a.swap(b)和swap(a, b),都可以完成a链表和b链表的交换。
11:reverse()
可以实现list的逆置
12:merge()
a.merge(b) 调用结束后b变为空,a中元素包含原来a和b的元素。
13:insert()
在指定位置插入一个或多个元素
14:erase()
删除一个元素或一个区域的元素
15:remove()
删除链表中匹配num的元素。
16:remove_if()
删除条件满足的元素,参数为自定义的回调函数。
17:sort()
将链表排序,默认升序。自定义回调函数实现自定义排序。
18:unique()
删除相邻的元素
19:unique()
删除相邻的元素
3)基本操作示例
#include<iostream>
#include<string>
#include<list>
using namespace std;
typedef list<string> LISTSTR;
int _tmain(int argc, _TCHAR* argv[])
{
LISTSTR test;
test.push_back("back");
test.push_back("middle");
test.push_back("front");
cout<<test.front()<<endl;
cout<<*test.begin()<<endl;
cout<<test.back()<<endl;
cout<<*(test.rbegin())<<endl;
test.pop_front();
test.pop_back();
cout<<test.front()<<endl;
return 0;
}
程序运行结果如下:
第一次写并不太好还请见谅。。