C++-----列表 list

版权声明: https://blog.csdn.net/zl6481033/article/details/85123618

列表list

        列表的核心是一个双向链表,双向开口,可在头、尾两个方向进行元素的插入和删除,因此list除了提供与vector相同的push_back(),和pop_back(),之外还提供在头部进行数据输入输出的操作函数。push_front()和pop_front()。因为链表内存空间不连续,所以不支持随即操作,既没有at()操作也不支持下标访问,只能从头到尾的顺序操作。

        下表为list 构造函数。

语句 说明
list(); 创建一个空列表
list(size_type n); 创建一个包含n个元素的列表
list(const list& x); 创建一个列表使用列表x初始化它

template<class InputIterator>

list(InputIterator first,InputIterator last);

创建一个列表,并以迭代器first~last区域元素初始化

        list重载了operator= 用户可以在两个list对象之间复制数据。下表为数据元素的插入和删除:

        

函数 说明

void assign(InputIterator _First,InputIterator _Last);

void assign(size_type _count, const Type& _val);

区域复值函数
void push_back(Type&& _Val); 增加一个元素到链表尾
void push_front(Type&& _Val); 增加一个元素到链表头
void pop_back(); 删除链表尾一个元素
void pop_front(); 删除链表头一个元素
void clear(); 删除所有元素

iterator erase(iterator _Where);

iterator erase(iterator _Fist,iterator _Last);

删除一个元素或一个区域的元素
void remove(const Type& _Val);  删除链表中匹配值的元素

template<class Predicate>

void remove_if(Predicate _Pred);

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

iterator insert(const _iterator _where,const& _)Val);

iterator insert(const_iterator _where ,Type&& _Val);

void inset(iterator _Where,size_type _Count,const Type& _Val);

template<class InputIterator>

void insert(iterator _Where,InputIterator _First,InputIterator _Last);

在指定位置插入一个或多个元素,有重载函数

void unique();

template<class BinaryPredicate>

void unique(BinaryPredicate _Pred);

删除重复相邻元素

reference front();

const_reference front() const;

返回第一个元素的引用
reference back();
  const_reference back() const;
返回最后一个元素的引用

        可以返回list关键迭代器的函数

       

函数 说明

iterator begin();

const_iterator begin() const;

返回第一个元素的指针

iterator end();

const_iterator end() const;

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

iterator rbegin();

const_iterator rebgin() const;

返回链表的最后一个元素的后向指针

iterator rend();

const_iterator rend() const;

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

        可以提供list状态的函数

       

函数 说明
bool empty() const; 用于判断链表是否为空
size_type max_size() const; 返回链表最大可能长度
size_type size() const; 返回链表中元素个数
void resize(size_type n,value_type val=value_type()); 重新定义链表长度
void reverse(); 反转链表

void sort();

template<class Compare>

void sort(Compare comp);

对链表排序默认升序

void merge(list &x);

template <class StrictWeakOrdering>

void merge(list&, StrictWeakOrdering);

对两个有序链表进行合并使之有序

 void splice(iterator position, list& x);

void splice(iterator position, list&, iterator i);

void splice(iterator position, list&, iterator first, iterator last);

对两个链表进行结合
void swap(list &x); 交换两个链表
#include<iostream>
#include<list>
using namespace std;
int main()
{
	list<int>::const_iterator cIter;
	//定义列表
	list<int>c1;
	//在列表尾部赋值
	c1.push_back(10);
	//在列表头部赋值
	c1.push_front(20);
	c1.push_front(30);
	//显示c1内容
	cout<<"c1=";
	for(auto &i:c1)
	  cout<<" "<<i;
	cout<<endl;
	//定义c2并在尾部赋值
	list<int>c2;
	c2.push_back(400);
	c2.push_back(500);
	c2.push_back(600);
	//清空c1
	c1.clear();
	//使用c2的后两个元素为c1赋值
	c1.assign(++c2.begin(),c2.end());
   //再显示c1内容
	cout<<"c1=";
	for(auto &i:c1)
	  cout<<" "<<i;
	cout<<endl;
	c1.clear();
	//c1赋值7个4
	c1.assign(7,4);
//显示c1内容
	cout<<"c1=";
	for(auto &i:c1)
	  cout<<" "<<i;
	cout<<endl;
	c1.clear();
	//列表初始化
	c1={9,8,7,6,2};
//显示c1内容
	cout<<"c1=";
	for(auto &i:c1)
	  cout<<" "<<i;
	cout<<endl;
}

        运行结果:

         

        g++编译时记得使用c++11标准。

        

猜你喜欢

转载自blog.csdn.net/zl6481033/article/details/85123618