list的特点
在list开头、中间、末尾插入数据,所需时间都是固定的,将元素从list中产出所需的时间是固定的。插入或者删除元素后,指向list中其他元素的迭代器仍然有效。
不过搜索速度比vector慢,因为元素没有储存在连续的内存单元中。插入元素
使用成员函数push_back()和push_front在list末尾和开头插入元素,使用成员函数insert在list中插入元素。
1
2
3
4
5
6
7
8
9
10
11
12
13list<int> intList(3, 6);
intList.push_front(5);
intList.push_back(7);
//在迭代器指向的位置添加一个元素
intList.insert(intList.begin(), 4);
//在迭代器指向的位置添加指定数量的某个元素
intList.insert(intList.end(), 2, 8);
//在迭代器指向的位置插入某个容器两个迭代器之间的元素
list<int> anoList(2, 9);
intList.insert(intList.end(), anoList.begin(), anoList.end());删除元素
使用list::erase()来删除list中的元素,他有两个重载版本,一个版本接受一个迭代器并删除迭代器指向的元素,另一个接受两个迭代器参数并删除指定范围内的所有元素。
元素反转和排序
使用list的成员方法reverse()和sort()对list进行反转和排序,执行者两个操作后之前指向元素的迭代器仍然有效。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29list<int> intList;
intList.push_back(7);
intList.push_front(5);
intList.push_back(6);
auto int6 = --intList.end(); //6
list<int>::const_iterator int7 = ++intList.begin(); //7
//反转
intList.reverse();
//排序
intList.sort();
cout << *int6 << endl; //6
cout << *int7 << endl; //7
```
>其中排序方法sort()还有一个重载版本,接受一个二元谓词作为参数:
```c++
//从大到小排序
bool MySortStandard(const int& lsh, const int& rsh) {
return (lsh > rsh);
}
int main()
{
......
//排序
intList.sort(MySortStandard);
......
}
STL forward_list
从c++11起,可以使用单向链表forward_list;
使用时需要包含头文件 <forward_list>
使用forward时,只能使用push_front()函数在开头插入元素,其他操作与list很像。