(7)list::list(list&& other); 移动构造;(c++11)
三、成员函数
(一)迭代器相关函数
begin()和end(); 返回指向首节点迭代器和指向尾节点后面一个位置迭代器;
cbegin()和cend(); begin()和end()的常量迭代器
rbegin()和rend(); begin()和end()的反向迭代器
crbegin()和crend(); begin()和end()的反向常量迭代器
(二)大小相关函数
size_t list::size(); 返回链表当前元素数量
size_t list::max_size(); 返回链表最大容纳元素数量
bool list::empty(); 判断链表是否为空
(三)访问函数
const T& list::front(); 返回第一个元素常量引用;
const T& list::back(); 返回最后一个元素常量引用;
(四)修改函数
void list::push_back(T&value); 尾插
void list::push_front(T&value); 头插
void list::pop_back(); 尾删
void list::pop_front(); 头删
void list::remove(T&value); 删除指定元素
void list::unique(); 删除相邻且重复的后续元素
void list::insert(iterator pos,T&value); 指定位置插入元素,存在插入多个元素、插入区间、插入初始化列表等多个重载
void list::splice(iterator pos,list&other); 指定位置复制插入或者移动插入other链表(指定元素或指定区间的元素)
void list::erase(iterator pos); 删除迭代器指定位置的元素,或者区间
(五)查找函数
list::itrator find(list::iterator first,list::iterator last,const T& value); 查找容器指定区间内的value值第一次出现的位置
int count(list::iterator first,list::iterator last,const T&value); 查找容器指定区间内value的个数
注意:find()函数和count()函数不是容器的成员函数
(六)其他函数
list::swap(list&other); 交换两个链表的内容
list::revers(); 翻转链表
list::sort(); 排序函数,默认递增;当链表内元素是自定义类型或者需要递减排序时,需要传入比较函数作为参数。
list::clear(); 清空链表
list::resize(size_t newsize); 改变链表大小,大于原链表大小时,添加初始化元素;小于原链表大小时,从链表后面删除相应元素。
四、排序算法示例
#include
using namespace std;
#include
#include
#include
class Person {
public:
string m_Nmae;
int m_Age;
int m_Height;
};
void printPerson(const Person&p) {
cout << "姓名:" << p.m_Nmae << " 年龄:" << p.m_Age << " 身高:" << p.m_Height << endl;
}
bool MyCompare(Person&p1, Person&p2) {
if (p1.m_Age == p2.m_Age) {
return p1.m_Height > p2.m_Height;
}
else {
return p1.m_Age < p2.m_Age;
}
}
void test() {
Person p1 = { "张三",20,170 };
Person p2 = { "李四",30,165 };
Person p3 = { "王五",40,185 };
Person p4 = { "赵六",40,180 };
Person p5 = { "陈七",50,185 };
listl;
l.push_back(p1);
l.push_back(p3);
l.push_back(p4);
l.push_back(p2);
l.push_front(p5);
for_each(l.begin(), l.end(), printPerson); cout << endl;
l.sort(MyCompare);
for_each(l.begin(), l.end(), printPerson);
}
int main(int argc,char const **argv) {
test();
return 0;
}
例子中对排序多加了一层逻辑,优先年龄排序,年龄相同时根据身高排序。