list容器
list构造函数
list<T> lst; //list采用模板类实现对象的默认构造形式
list(begin,end); //构造函数将[begin,end)区间中的元素拷贝给本身
list(n,elem); //构造函数将n个elem拷贝给本身
list(const list &lst); //拷贝构造函数
list的赋值和交换:
assign(begin, end); //将[begin, end)区间中的数据拷贝赋值给本身
assign(n, ele); //将n个elem拷贝赋值给本身
list& operator=(const list &lst); //重载等号操作符
swap(lst); //将lst与本身元素互换
list大小操作:
size(); //返回容器中元素的个数
empty(); //判断容器是否为空
resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置
//如果容器变短,则末尾长处容器长度的元素被删除
resize(num ,elem) //重新指定容器的长度为num,若容器变长,则elem填充新位置
//如果容器变短,则末尾长处容器长度的元素被删除
不可以随机访问???
list插入和删除:
push_back(elem); //在容器尾部添加一个元素
pop_back(); //删除容器中最后一个元素
push_front(elem); //在容器开头插入一个元素
pop_front(); //从容器开头移除第一个元素
insert(pos, elem); //在pos位置插入elem元素的拷贝,返回新的数据位置
insert(pos, n, elem); //在pos位置插入n个elem元素的拷贝,无返回值
insert(pos, begin, end);//在pos位置插入[begin, end)区间的数据,无返回值
clear(); //移除容器中的所有数据
erase(begin, end); //删除[begin, end)区间的数据,返回下一个数据的位置
erase(pos); //删除pos位置的数据,返回下一个数据的位置
remove(elem); //删除容器中所有的与elem值匹配的元素
list数据存取,排序,反转:
front(); //返回第一个元素
back(); //返回最后一个元素
reverse(); //反转链表
sort(); //链表排序
*/
#include <iostream>
using namespace std;
#include <list>
void printList(const list<int> &L)
{
for (list<int> :: const_iterator it = L.begin(); it != L.end(); it ++){
cout << *it << " ";
}
cout << endl;
}
list构造函数:
void test1()
{
list<int> l1;
l1.push_back(2);
l1.push_back(3);
l1.push_back(4);
printList(l1);
list <int> l2(l1.begin(), l1.end());
printList(l2);
list <int> l3(10, 6);
printList(l3);
list<int> l4(l1);
printList(l4);
}
list的赋值、交换、大小:
void test2()
{
list<int> L1;
L1.push_back(1);
L1.push_back(2);
L1.push_back(3);
L1.push_back(4);
L1.push_back(5);
printList(L1);
list<int> L2;
L2 = L1;
printList(L2);
list<int> L3;
L3.assign(L1.begin(), L1.end());
printList(L3);
list<int> L4(10, 100);
printList(L4);
//交换
L4.swap(L1);
printList(L4);
printList(L1);
cout << "L4的size = " << L4.size() << endl;
list<int> L5;
if (L5.empty()){
L5.resize(10);
printList(L5);
}
if(!L5.empty()){
L5.resize(20, 6);
printList(L5);
L5.resize(5,5);
printList(L5);
}
}
list插入和删除:
void test3()
{
list<int> lst1(5,6);
printList(lst1);
lst1.push_back(10);
lst1.push_front(20);
printList(lst1);
lst1.pop_back();
lst1.pop_front();
printList(lst1);
//pos为位置指针
list<int> ::iterator it = lst1.begin(); //迭代器只能++,--,不能随机
lst1.insert(++it, 777);
printList(lst1);
lst1.insert(--it, 888);
printList(lst1);
lst1.insert(++it, lst1.begin(), lst1.end());
printList(lst1);
lst1.remove(888);
printList(lst1);
lst1.erase(++it);
printList(lst1);
lst1.erase(++lst1.begin(), --lst1.end());
printList(lst1);
lst1.clear();
printList(lst1);
}
list数据存取,排序,反转:
void test4()
{
list<int> lst;
lst.push_back(2);
lst.push_back(1);
lst.push_back(10);
lst.push_back(6);
lst.push_back(8);
cout << "第一个元素为:" << lst.front() << endl;
cout << "最后一个元素为:" << lst.back() << endl;
printList(lst);
lst.sort();
printList(lst);
lst.reverse();
printList(lst);
}
自定义类型排序示例:
#include<string>
//自定义Person类
class Person
{
public:
Person(string name, int age, int height){
this -> m_Name = name;
this -> m_Age = age;
this -> m_Height = height;
}
string m_Name;
int m_Age;
int m_Height;
};
//重载printList函数
void printList(const list<Person> & p)
{
for (list<Person> :: const_iterator it = p.begin(); it != p.end(); it ++){
cout << (*it).m_Name << " " << it -> m_Age << " " << it -> m_Height << endl;
}
}
//sort的回调函数
bool myCompare(const Person & p1, const Person & p2)
{
if (p1.m_Height == p2.m_Height){
return p1.m_Age < p2.m_Age;
}else{
return p1.m_Height < p2.m_Height;
}
}
void test5()
{
Person p1 ("唐三藏", 22, 175);
Person p2 ("孙悟空", 999, 185);
Person p3 ("猪悟净", 888, 170);
Person p4 ("沙悟净", 777, 180);
Person p5 ("白龙马", 666, 175);
Person p6 ("玉帝", 2222, 175);
list<Person> xiyou;
xiyou.push_back(p1);
xiyou.push_back(p2);
xiyou.push_back(p3);
xiyou.push_back(p4);
xiyou.push_front(p5);
xiyou.push_front(p6);
printList(xiyou);
cout << "排序后:" << endl;
//对于自定义数据类型,必须要指定排序规则,否则编译器不知道如何进行排序
//高级排序只是在排序规则上再进行一次逻辑规则制定,并不复杂
xiyou.sort(myCompare);
printList(xiyou);
}
int main()
{
test1();
test2();
test3();
test4();
test5();
system("pause");
return 0;
}
*黑马程序员c++课程学习练习