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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值