1 头文件包含
#include
2 list可以有指定尺寸和初始值的构造。但是无法index索引,无法at()函数索引。遍历的时候只能使用迭代器。
listl1;
listl2(6,2);
cout << l1.size() << endl;
cout << l2.size() << endl;
3 list前后都可以插入和删除,这一点和deque相同,它是一个双向链表。
l1.push_back(1);
l1.push_back(2);
l1.push_back(3);
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
l1.pop_back();
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
l1.pop_front();
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
4 可以clear清空和empty判断是否为空
if (l1.empty()) {
cout << “l1 is empty” << endl;
}
l1.clear();
if (l1.empty()) {
cout << “l1 is empty after clear” << endl;
}
5 list可以通过insert插入数据,用法和vector相似
l1.insert(l1.begin(), 2); //在迭代器位置插入一个元素2
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
listl3;
l3.insert(l3.begin(), 3,90); //在迭代器位置后面插入3个元素90
cout << l3.size() << " " << l3.front() << " " << l3.back() << endl;
l3.insert(l3.begin(),l1.begin(), l1.end()); //在迭代器位置插入[first,last)之间的内容
cout << l3.size() << " " << l3.front() << " " << l3.back() << endl;
6 同样有swap函数
l1.swap(l3);
cout << l1.size() << endl;
cout << l3.size() << endl;
7 通过assign给list赋值
l1.assign(4, 5); //必须要有个数4和初值5,只有一个初值5,不写数量是不可以的
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
l1.assign(l3.begin(),l3.end());
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
8 可以通过max_size()函数获得最大list尺寸
cout << l1.max_size() << endl;
9 关于两个list的splice剪切——这个功能是独有的
l1.splice(l1.begin(), l3); //将l3整个剪切到l1.begin()位置,剪切后l3为空
cout << l1.size() << " " << l3.size() << endl;
l1.splice(l1.begin(), l2,l2.begin()); //将l2的l2.begin()的位置的一个元素剪切到l1.begin()位置,剪切后l2会少该元素
cout << l1.size() << " " << l2.size() << endl;
l1.splice(l1.begin(), l2, l2.begin(),l2.end()); //将l2的l2.begin()-l2.end()的范围区间的元素剪切到l1.begin()位置,剪切后l2会少该区间的元素
cout << l1.size() << " " << l2.size() << endl;
10 关于两个list的merge合并——这个功能是独有的
listl4;
l4.push_back(4);
l4.push_back(8);
l4.push_back(9);
l4.push_back(3);
l1.sort(); //从小到大排序
l4.sort();
l1.merge(l4);//合并之前必须是排过序的,合并之后也是排好序的(从小到大),合并之后l4为空
cout << l1.front() << " " << l1.back() << endl;
cout << l1.size() << " " << l4.size() << endl;
11 unique去除重复的元素——这个功能是独有的
l1.unique();
cout <<l1.size() << " " << l1.front() << " " << l1.back() << endl;
12 通过erase删除元素
l1.erase(l1.begin()); //删除指定位置的元素
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
l1.erase(l1.begin(), l1.end());//删除指定范围区域的元素[first,last)
cout << l1.size() << endl;
13 通过resize改变list的尺寸
l1.resize(5); //本来l1为空,现在size为5,初值全为0-不写默认就为0
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
l1.resize(4, 6);//本来size为5,现在size为4,值全为0,这里的6没用
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
l1.resize(7, 6);//本来size为4,现在size为7,7-4=3,后面扩充的3个值初始化为6
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
14 通过reverse函数可以list进行翻转——这个功能是独有的
l1.reverse();
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
15 remove和remove_if函数——这个功能是独有的
bool valueXY(int value) {
return value < 5;
}
l1.remove(5); //移除值等于5的元素
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
l1.remove_if(valueXY); //移除符合条件的元素
cout << l1.size() << " " << l1.front() << " " << l1.back() << endl;
16 list的迭代器
list::iterator iter1 = l1.begin(); //返回起始位置的迭代器
cout << *iter1 << endl;
list::iterator iter2 = l1.end(); //返回末尾的下一个位置的迭代器
iter2–;
cout << *iter2 << endl;
list::reverse_iterator iter3 = l1.rbegin(); //返回反向起始的迭代器-就是正向末尾
cout << *iter3 << endl;
list::reverse_iterator iter4 = l1.rend(); //返回反向末尾的前一个位置迭代器-正向开头的前一个位置
iter4–;
cout << *iter4 << endl;