Stl List使用

一、 List简介

        STL中的list就是一双向链表,因此它的内存空间是可以不连续的,通过指针来进行数据的访问,这使list的随机存储变得非常低效,list不支持随机访问,就是没有 at()函数和[]操作符。但是list可以很好地支持任意地方的插入和删除,只需移动相应的指针即可,可高效地进行插入删除元素。

        总之,如果你需要大量的插入和删除,而不关心随即存取,则应使用list

二、 List的构造函数

list<int> L0;

空链表

list<int> L1(9);

建一个含个默认值是的元素的链表

list<int> L2(5,1);

建一个含个元素的链表,值都是

list<int> L3(L2);

建一个L2copy链表

list<int> L4(L0.begin(), L0.end());

建一个含L0一个区域的元素

 

三、 List用法代码实现

#include "stdafx.h"
#include <list>
#include <iostream>

using namespace std;

static int LENGTH = 5;

typedef struct MsgData
{
	int   n_Port;
	char* p_Msg;
}DATA_ST;

// 遍历list并打印出来
void showList(list<int> v_List)
{
	for (list<int>::iterator iter = v_List.begin(); iter != v_List.end(); iter++)
	{
		cout << *iter << "    ";
	}
	cout << "\n";
}

// 判断list是否为空
bool isEmpty(list<int> v_List)
{
	if (v_List.empty())
	{
		return true;
	}
	else
	{
		return false;
	}
}

// 根据给的值来遍历删除list中的值,记住要传引用,不然删除不成功
void deleteElementByValue(list<int>& v_List,int value)
{
	// 这样写防止出现没有值得时候iter错误
	for (list<int>::iterator iter = v_List.begin(); iter != v_List.end();)
	{
		if (*iter == value)
		{
			iter = v_List.erase(iter);
			cout << "Delete value " << value << " success. \n" ;
		}
		else
		{
			iter++;
		}
	}
}

int main()
{
	/*// 存储Struct的list
	list<DATA_ST> listST;
	DATA_ST msgData;
	msgData.n_Port = 8096;
	msgData.p_Msg  = "Pwrd";
	listST.push_back(msgData);*/

	// 存储int类型的list
	list<int> listN;
	list<int>::iterator iter;
	iter = listN.begin();
	// 从list的结尾插值
	listN.push_back(2);
	// 从list的开头插入值
	listN.push_front(1);
	// 在指定的iterator处插入值
	do 
	{
		LENGTH++;
		listN.push_back(LENGTH);
	} while (LENGTH != 10);
	/*// 把LENGTH个元素LENGTH赋值给listN链表,原有的值会被覆盖s
	listN.assign(LENGTH, LENGTH);
	// 指定位置插入值
	//listN.insert(iter, LENGTH);*/
	showList(listN);
	deleteElementByValue(listN,6);
	/*// 相当于上面函数的功能
	listN.remove(6);*/
	// 反转list
	listN.reverse();
	showList(listN);
	/*// 清除第一个元素
	listN.pop_front();
	// 清除最后一个元素
	listN.pop_back();
	// 清空
	listN.clear();*/
	system("pause");
	return 0xABCD;
}

 

四、 List常用函数

List常用函数

说明

constructor

构造函数

destructor

析构函数

operator=

赋值重载运算符

assign

分配值

front

返回第一个元素的引用

back

返回最后一元素的引用

begin

返回第一个元素的指针(iterator)

end

返回最后一个元素的下一位置的指针

rbegin

返回链表最后一元素的后向指针(reverse_iterator or const)

rend

返回链表第一元素的下一位置的后向指针

push_back

增加一元素到链表尾

push_front

增加一元素到链表头

pop_back

pop_back()删除链表尾的一个元素

pop_front

删除链表头的一元素

clear

删除所有元素

erase

删除一个元素或一个区域的元素(两个重载)

remove

删除链表中匹配值的元素(匹配元素全部删除)

remove_if

删除条件满足的元素(遍历一次链表),参数为自定义的回调函数

empty

判断是否链表为空

max_size

返回链表最大可能长度

size

返回链表中元素个数

resize

重新定义链表长度(两重载函数)

reverse

反转链表

sort

对链表排序,默认升序

merge

合并两个有序链表并使之有序

splice

对两个链表进行结合(三个重载函数) 结合后第二个链表清空

insert

在指定位置插入一个或多个元素(三个重载函数)

swap

交换两个链表(两个重载)

unique

删除相邻重复元素 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值