List的基本知识及案例

List简介

list是一个双向链表容器,可高效地进行插入删除元素。
list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符。It++(ok) it+5(err)
#include <list> 

List对象的默认构造

list采用采用模板类实现,对象的默认构造形式:list<T> lstT;  如:
list<int> lstInt;            //定义一个存放int的list容器。
list<float> lstFloat;     //定义一个存放float的list容器。
list<string> lstString;     //定义一个存放string的list容器。
...                 
//尖括号内还可以设置指针类型或自定义类型。

list头尾的添加移除操作

list.push_back(elem);      //在容器尾部加入一个元素
list.pop_back();              //删除容器中最后一个元素
list.push_front(elem);     //在容器开头插入一个元素
list.pop_front();              //从容器开头移除第一个元素
 eg:
    list<int> lstInt;
    lstInt.push_back(1);
    lstInt.push_back(3);
    lstInt.push_back(5);
    lstInt.push_back(7);
    lstInt.push_back(9);
    lstInt.pop_front();
    lstInt.pop_front();
    lstInt.push_front(11);
    lstInt.push_front(13);
    lstInt.pop_back();
    lstInt.pop_back();                                // lstInt    {13,11,5}

list的数据存取

ist.front();   //返回第一个元素。
list.back();  //返回最后一个元素。
 
    list<int> lstInt;
    lstInt.push_back(1);
    lstInt.push_back(3);
    lstInt.push_back(5);
    lstInt.push_back(7);
    lstInt.push_back(9);
 
    int iFront = lstInt.front(); //1
    int iBack = lstInt.back();       //9
    lstInt.front() = 11;             //11
    lstInt.back() = 19;          //19

list与迭代器

list.begin();                    
list.end();                      
list.rbegin();        
list.rend();      
eg:
    list<int> lstInt;
    lstInt.push_back(1);
    lstInt.push_back(3);
    lstInt.push_back(5);
    lstInt.push_back(7);
    lstInt.push_back(9);
 
    for (list<int>::iterator it=lstInt.begin(); it!=lstInt.end(); ++it)
    {
         cout << *it;
         cout << " ";
    }
    for (list<int>::reverse_iterator rit=lstInt.rbegin(); rit!=lstInt.rend(); ++rit)
    {
         cout << *rit;
         cout << " ";
    }

list对象的带参数构造

list(beg,end);    //构造函数将[beg, end)区间中的元素拷贝给本身。注意该区间是左闭右开的区间。
list(n,elem);   //构造函数将n个elem拷贝给本身。
list(const list &lst);  //拷贝构造函数。
 eg:
    list<int> lstIntA;
    lstIntA.push_back(1);
    lstIntA.push_back(3);
    lstIntA.push_back(5);
    lstIntA.push_back(7);
    lstIntA.push_back(9);
 
    list<int> lstIntB(lstIntA.begin(),lstIntA.end());     //1 3 5 7 9
    list<int> lstIntC(5,8);                               //8 8 8 8 8
    list<int> lstIntD(lstIntA);                        //1 3 5 7 9

list的赋值

list.assign(beg,end);    //将[beg, end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。
list.assign(n,elem);  //将n个elem拷贝赋值给本身。
list& operator=(const list &lst);   //重载等号操作符
list.swap(lst);  // 将lst与本身的元素互换。
 
    list<int> lstIntA,lstIntB,lstIntC,lstIntD;
    lstIntA.push_back(1);
    lstIntA.push_back(3);
    lstIntA.push_back(5);
    lstIntA.push_back(7);
    lstIntA.push_back(9);
 
    lstIntB.assign(lstIntA.begin(),lstIntA.end());        //1 3 5 7 9
    lstIntC.assign(5,8);                             //8 8 8 8 8
    lstIntD = lstIntA;                              //1 3 5 7 9
    lstIntC.swap(lstIntD);                        //互换

List.cpp

#include <iostream>
#include <list>
#include <cstring>

using namespace std;

class Student
{
private:
	char name[20];
	int age;
public:
	Student(char *n, int a);
	void show();
};

Student::Student(char *n, int a)
{
	strcpy(name, n);
	age = a;
}

void Student::show()
{
	cout << "name : " << name << " age : " << age << endl;
}

int main()
{
	Student s1("aa", 20);
	Student s2("bb", 21);
	Student s3("cc", 20);
	Student s4("dd", 23);
	Student s5("ee", 20);
	Student s6("ff", 23);

	list<Student> l;

	l.push_back(s1);
	l.push_back(s2);
	l.push_back(s3);
	l.push_front(s4);

	for (list<Student>::iterator it = l.begin(); it != l.end(); it++)
	{
		it->show();
	}
	
	cout << "the first one" << endl;
	l.front().show();
	cout << "the last one" << endl;
	l.back().show();
	cout << "~~~~~~~~~~~~~~" << endl;

	l.reverse();
	for (list<Student>::iterator it = l.begin(); it != l.end(); it++)
	{
		it->show();
	}

	cout << "~~~~~~~~~~~~~~" << endl;
	l.insert(l.begin(), s5);
	for (list<Student>::iterator it = l.begin(); it != l.end(); it++)
	{
		it->show();
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/zys15195875600/article/details/81566338