list container (C++)

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 constructor:

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);
}

Assignment, exchange, and size of 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 insertion and deletion:

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 data access, sort, reverse:

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);
}

Example of custom type sorting:

#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;
}

*Dark horse programmer c++ course learning exercises

Guess you like

Origin blog.csdn.net/Fighting_gua_biu/article/details/113953824