0
点赞
收藏
分享

微信扫一扫

STL容器之list

桑二小姐 2022-02-19 阅读 52

容器的遍历:

void printlist(list<int>& L) {
	for (list<int>::const_iterator it = L.begin(); it != L.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
}

一.构造函数

list<int lst>//list曹勇模板类试下新年,对象的默认构造形式

list(beg,end);//构造函数将[beg,end)区间中的元素拷贝给本身

list(n,elme);//构造函数将n个elem拷贝给本身

list(const list &lst);//拷贝构造函数

//list容器构造函数
void test01() {
	//创建list容器
	list<int> L1;

	//添加数据
	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);
	L1.push_back(40);

	//遍历容器
	printlist(L1);

	//区间方法构造
	list<int>L2(L1.begin(), L1.end());
	printlist(L2);

	//拷贝构造
	list<int>L3(L2);
	printlist(L3);

	//n个elem
	list<int>L4(10, 1000);
	printlist(L4);
}

二.赋值和交换

assign(beg,end);//将[beg,end)区间中的数据拷贝赋值给本身

assign(n,elem);//将n个elem拷贝赋值给本身

list& operator=(const list &list);//重载等号操作符,用的时候直接用等号就行

swap(lst);//将lst于本身的元素进行交换

void test01() {
	//创建list容器
	list<int> L1;

	//添加数据
	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);
	L1.push_back(40);

	//遍历容器
	printlist(L1);

	list<int>L2;
	L2 = L1;
	printlist(L2);
	list<int>L3;
	L3.assign(L2.begin(), L2.end());
	printlist(L3);

	list<int>L4;
	L4.assign(10, 100);//十个一百

    //与之前的容器操作相似,不东懂可以看一下前面的函数
}

三.大小操作

size();//返回容器中的元素个数

empty();//判断容器是否为空

resize();//重新指定容器的长度为num,若容器变长,则以默认值填充新的位置,若果容器变短,则末尾超出容器长度的元素被删除

resize(num,elem);重新指定容器的长度为num,若容器变长,则以elem填充新的位置,若果容器变短,则末尾超出容器长度的元素被删除

操作与前几个容器一样,直接去看前面几个容器的代码吧

代码略

四.插入和删除

push_back(elem);//在容器尾部加一个元素

pop_back();//删除容器最后一个元素

push_from(elem);//在容器开头插入一个元素

pop_front();//从容器开头移除一个元素

insert(pos,elem);//在pos位置插elem元素的拷贝,返回新数据的位置

insert(pos,n,elem);//在pos位置插n个elem元素的拷贝,无返回值

insert(pos,beg,end);//在pos位置插[beg,end)区间的数据

clear();//移除所有元素

erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置

erase(pos);//删除pos位置的数据,返回下一个数据的位置

remove(elem);//删除容器中所有与elem相匹配的元素

void test01() {
	list<int> L;

	L.push_back(10);
	L.push_back(20);
	L.push_back(30);
	
	L.push_front(100);
	L.push_front(200);
	L.push_front(300);
	printlist(L);

	//尾删
	L.pop_back();
	printlist(L);//300 200 100 10 20

	//头删
	L.pop_front();//200 100 10 20

	//insert插入
	L.insert(L.begin(), 1000);
	printlist(L);//1000 200 100 10 20
	
	//删除
	L.erase(L.begin());
	printlist(L); //200 100 10 20

	//移除
	L.remove(10);//多个10页都会删除
	printlist(L);//200 100 20
}

五.数据存取

front();//返回第一个元素

back();//返回第二个元素

不支持[]访问容器元素,也不支持at方式访问容器元素,原因是list本质链表,不是连续空间存储数据,迭代器也是不支持随机访问的

代码略

六.反转和排序

reverse();//反转链表

sort();//链表排序

void test01() {
	list<int> L;

	L.push_back(10);
	L.push_back(20);
	L.push_back(30);
	printlist(L);//10 20 30

	L.reverse();
	printlist(L);//	30 20 10
	
	//所有不支持随机访问的迭代器的容器,不可以用标准算法
	//不支持随机访问迭代器的容器,内部会提供相应的算法
	//sort(L.begin(), L.end());//运行会报错,
	L.sort();//直接这样写即可
	printlist(L);
}
举报

相关推荐

0 条评论