STL list

概述 
STL::list是STL最常用的容器之一,其本质上是一个双向环状链表,链表每一个结点内容如下: 
template 
struct __list_node { 
typedef void* void_pointer; 
void_pointer next; // 指向下一个节点的指针 
void_pointer prev; // 指向前一个节点的指针 
T data; //list 数据 
}; 
由于其双链表的结构,因此list适合需要频繁插入和删除数据的场合,这个和vector刚好相反。

API

Member functions 
(constructor)    Construct list (public member function) 
(destructor)    List destructor (public member function) 
operator=    Copy container content (public member function)

Iterators: 
begin    Return iterator to beginning (public member function) 
end    Return iterator to end (public member function) 
rbegin    Return reverse iterator to reverse beginning (public member function) 
rend    Return reverse iterator to reverse end (public member function)

Capacity: 
empty    Test whether container is empty (public member function) 
size    Return size (public member function) 
max_size    Return maximum size (public member function) 
resize    Change size (public member function)

Element access: 
front    Access first element (public member function) 
back    Access last element (public member function)

Modifiers: 
assign    Assign new content to container (public member function) 
push_front    Insert element at beginning (public member function) 
pop_front    Delete first element (public member function) 
push_back    Add element at the end (public member function) 
pop_back    Delete last element (public member function) 
insert    Insert elements (public member function) 
erase    Erase elements (public member function) 
swap    Swap content (public member function) 
clear    Clear content (public member function)

Operations: 
splice    Move elements from list to list (public member function) 
remove    Remove elements with specific value (public member function) 
remove_if    Remove elements fulfilling condition (public member function template) 
unique    Remove duplicate values (member function) 
merge    Merge sorted lists (public member function) 
sort    Sort elements in container (public member function) 
reverse    Reverse the order of elements (public member function)

Allocator: 
get_allocator    Get allocator (public member function)

Member types 
of template > class list; 
member type    definition 
reference    Allocator::reference 
const_reference    Allocator::const_reference 
iterator    Bidirectional iterator 
const_iterator    Constant bidirectional iterator 
size_type    Unsigned integral type (usually same as size_t) 
difference_type    Signed integral type (usually same as ptrdiff_t) 
value_type    T 
allocator_type    Allocator 
pointer    Allocator::pointer 
const_pointer    Allocator::const_pointer 
reverse_iterator    reverse_iterator 
const_reverse_iterator    reverse_iterator

相比于vector,list内存分配策略简单,每插入一个新元素,则new一个新结点,删除一个元素,则delete这个结点。需要注意的是,由于list的每一个结点除了包含对应的数据,还包含指向上一个和下一个元素的指针,因此,在资源紧张的环境下,这块占用的内存需要考虑。

splice 
void splice ( iterator position, list& x ); 
void splice ( iterator position, list& x, iterator i ); 
void splice ( iterator position, list& x, iterator first, iterator last ); 
splice可以将一个list的元素搬到另一个list,避免了先删后插的做法,在数据元素比较大的情况下,还是相当高效的。 
splice提供多个接口,可以搬移单个元素,部分元素or整个list .

示例:

#include<iostream>
#include<list>
using namespace std;

int main()
{
	list<int>list1(5,100);
	list1.push_back(300);
	list<int>::iterator it=list1.begin();
	for(;it!=list1.end();it++)
		cout<<*it<<"  ";
	cout<<endl;

	list<int>list2;
	it=list2.begin();
	list2.splice(it,list1);
	cout<<"list1 ";
	for(list<int>::iterator it1=list1.begin();it1!=list1.end();it1++)
		cout<<*it1<<"  ";
	cout<<endl;
	cout<<"list2: ";
	for(list<int>::iterator it2=list2.begin();it2!=list2.end();++it2)
		cout<<*it2<<"  ";
	cout<<endl;

	return 0;
}


输出结果

100  100  100  100  100  300
list1
list2: 100  100  100  100  100  300
Press any key to continue


 

STL list是C++标准模板库中的一个双向链表容器,它提供了一系列接口用于操作和管理链表中的元素。下面是一些常见的STL list接口: 1. 构造函数: - list(size_type n, const value_type& val = value_type()):构造包含n个值为val的元素的list。 - list():构造一个空的list。 - list(const list& x):拷贝构造函数,用于复制另一个list的内容构造新的list。 - list(InputIterator first, InputIterator last):用[first, last)区间中的元素构造list。 2. 容器大小: - size():返回list中元素的个数。 - empty():检查list是否为空。 3. 元素访问: - front():返回list中第一个元素的引用。 - back():返回list中最后一个元素的引用。 4. 插入和删除元素: - push_front(const value_type& val):在list的开头插入一个元素。 - pop_front():移除list的第一个元素。 - push_back(const value_type& val):在list的末尾插入一个元素。 - pop_back():移除list的最后一个元素。 - insert(iterator position, const value_type& val):在指定位置之前插入一个元素。 - erase(iterator position):移除指定位置的元素。 - erase(iterator first, iterator last):移除[first, last)区间中的元素。 5. 元素操作: - clear():移除list中的所有元素。 - remove(const value_type& val):移除所有等于val的元素。 - unique():移除所有相邻重复的元素。 - sort():对list中的元素进行排序。 - reverse():反转list中元素的顺序。 你可以参考C++官方文档(https://cplusplus.com/reference/list/list/)了解更多关于STL list的接口和用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值