标签:style blog class c code tar
简介
List是一种可在常数时间内在任何位置执行插入和删除操作的顺序容器。list是双向链表,其迭代器是双向的。与其他顺序容器(array, vector, deque)相比,list容器在任意位置执行插入、提取、和移动元素的操作更高效,但它不能通过在容器中的位置直接获取元素。
成员函数
复制控制
list::list()
构造函数:构造一个新的list对象,根据参数初始化list容器的内容。
list::~list()
析构函数:销毁以list对象。
list::operator=
为容器分配新的内容,代替当前的内容,随之修改其大小。
示例代码
-
#include<iostream>
-
#include<list>
-
-
using namespace std;
-
-
void
-
print(list<int> l)
-
{
-
for(list<int>::iterator it = l.begin(); it != l.end(); ++it)
-
{
-
cout << *it << "";
-
}
-
cout << endl;
-
}
-
-
int
-
main(void)
-
{
-
-
list<int> first;
-
list<int> second(5, 10);
-
list<int> third(second.begin(), second.end());
-
list<int> fourth(third);
-
int arr[] = {1, 2, 3, 4, 5};
-
list<int> fifth(arr, arr + sizeof(arr)/sizeof(int));
-
print(second);
-
print(third);
-
print(fourth);
-
print(fifth);
-
-
-
first = fifth;
-
print(first);
-
-
return(0);
-
}
Iterator
list::begin()
返回一个迭代器,指向list的第一个元素。返回值类型:iterator/const_iterator。
list::end()
返回一个迭代器,指向list的最后一个元素的下一个位置。返回值类型:iterator/const_iterator。
list::rbegin()
返回一个反转迭代器,指向list的最后一个元素。返回值类型:reverse_iterator/reverse_const_iterator。
list::rend()
返回一个反转迭代器,指向list的第一个元素的前一个位置。返回值类型:reverse_iterator/reverse_const_iterator。
list::cbegin()
begin()的const版本。
list::cend()
end()的const版本
list::crbegin()
rbegin()的cosnt版本。
list::crend()
rend()的const版本。
示例代码
-
#include <iostream>
-
#include <list>
-
-
using namespace std;
-
-
int
-
main(void)
-
{
-
int arr[] = {1, 2, 3, 4, 5};
-
list<int> l(arr, arr + sizeof(arr)/sizeof(int));
-
-
-
for(list<int>::iterator it = l.begin(); it != l.end(); ++it)
-
{
-
cout << *it << " ";
-
}
-
cout << endl;
-
-
-
for(list<int>::reverse_iterator it = l.rbegin(); it != l.rend(); ++it)
-
{
-
cout << *it << " ";
-
}
-
cout << endl;
-
-
-
for(list<int>::const_iterator it = l.cbegin(); it != l.cend(); ++it)
-
{
-
cout << *it << " ";
-
}
-
cout << endl;
-
-
-
for(list<int>::const_reverse_iterator it = l.crbegin(); it != l.crend(); ++it)
-
{
-
cout << *it << " ";
-
}
-
cout << endl;
-
-
return 0;
-
}
Capacity
list::empty()
测试list是否为空,空返回true,否则返回false。
list::size()
返回list中元素个数。返回值类型list::size_type。
list::max_size()
返回list能够容纳元素的最大个数。返回值类型list::size_type。
示例代码
-
#include<iostream>
-
#include<list>
-
-
using namespace std;
-
-
int
-
main(void)
-
{
-
list<int> l(10, 20);
-
-
-
if(l.empty()){
-
cout << "Listis empty" << endl;
-
}else{
-
cout << "Listis not empty" << endl;
-
}
-
-
cout << "Listsize : " << l.size() << endl;
-
cout << "Listmax size : " << l.size() << endl;
-
-
return(0);
-
}
Element access
list::front()
返回list第一个元素的引用。返回值类型reference/const_reference。
list::end()
返回list最后一个元素的引用。返回值类型reference/const_reference。
示例代码
-
#include<iostream>
-
#include<list>
-
-
using namespace std;
-
-
int
-
main(void)
-
{
-
int arr[] = {1, 2, 3, 4, 5};
-
list<int> l(arr, arr + sizeof(arr)/sizeof(int));
-
-
-
cout << "Thefirst element is : " << l.front() << endl;
-
-
cout << "Thesecond element is : " << l.back() << endl;
-
-
return(0);
-
}
Modifiers
list::assign()
为list分配新的内容,以代替当前内容,并随之改变其大小。
list::emplace_front()
在list的前端插入一个元素。插入的元素由其构造函数创建。
list::push_front()
在list的前端插入一个元素。与emplace_front()不同,它的插入方式是将一个已存在的元素复制或移动到list前端。
list::pop_front()
删除list的第一个元素。
list::emplace_back()
在list的末端插入一个元素。插入的元素由其构造函数创建。
list::push_back()
在list的末端插入一个元素。与emplace_back()不同,它的插入方式是将一个已存在的元素复制或移动到list末端。
list::pop_back()
删除list的最后一个元素。
list::emplace()
在指定位置插入一个元素。插入的元素由其构造函数创建。
list::insert()
在指定位置插入一个或多个元素。对于插入大量元素来说是非常高效的。
list::erase()
从list中删除指定位置的一个或一定范围的元素。
list::swap()
交换两个list中的元素。两个list类型必须相同,大小可以不同。
list::resize()
重新分配list的大小,使其能容纳指定数量的元素。
list::clear
删除list中的所有元素。
示例代码
-
#include<iostream>
-
#include<list>
-
#include<vector>
-
-
using namespace std;
-
-
void
-
print(list<int> l)
-
{
-
for(list<int>::iterator it = l.begin(); it != l.end(); ++it)
-
{
-
cout << *it << "";
-
}
-
cout << endl;
-
}
-
-
int
-
main(void)
-
{
-
list<int> first;
-
list<int> second;
-
list<int> third;
-
int arr[] = {1, 2, 3, 4, 5};
-
-
-
first.assign(5, 10);
-
second.assign(first.begin(), first.end());
-
third.assign(arr, arr + sizeof(arr)/sizeof(int));
-
print(first);
-
print(second);
-
print(third);
-
-
-
list<pair<int, char>> pl;
-
pl.emplace_front(1, ‘a‘);
-
pl.emplace_front(2, ‘b‘);
-
pl.emplace_back(3, ‘c‘);
-
pl.emplace(pl.end(), 4, ‘d‘);
-
for(pair<int, char> x :pl)
-
{
-
cout<< x.first << "" << x.second << endl;
-
}
-
-
-
third.push_front(10);
-
third.push_back(20);
-
print(third);
-
-
-
first.insert(first.begin(), 20);
-
first.insert(first.end(), 2, 30);
-
vector<int> vec(2, 40);
-
first.insert(first.end(), vec.begin(), vec.end());
-
print(first);
-
-
-
second.erase(second.begin());
-
print(second);
-
second.erase(++second.begin(), second.end());
-
print(second);
-
-
-
second.swap(first);
-
print(first);
-
print(second);
-
-
-
third.resize(5);
-
print(third);
-
third.resize(10);
-
print(third);
-
third.resize(15, 100);
-
print(third);
-
-
-
third.clear();
-
cout << "Thesize of third is : " << third.size() << endl;
-
-
return(0);
-
}
Operations
list::splice()
将一个list A中的元素转移到list B的指定位置,并将A中被转移的元素删除。
list::remove()
将list中指定的元素删除。
list::remove_if()
根据判断条件删除list的元素,如果条件为真则删除该元素。
list::unique()
删除list中具有相同值的元素,只保留第一个。也可以根据条件删除具有相同条件的元素,只保留第一个。
list::merge()
合并两个list,在合并之前两个list应该先排序,合并之后的list依然有序。也可以自定义排序的条件。
list::sort()
对list中的元素进行排序,变更它们在容器中的位置。sort()还可以按给定条件进行排序。
list::reverse()
改变list中元素的顺序。
示例程序
-
#include<iostream>
-
#include<cmath>
-
#include<list>
-
-
using namespace std;
-
-
void
-
print(list<int> l)
-
{
-
for(list<int>::iterator it = l.begin(); it != l.end(); ++it)
-
{
-
cout << *it << "";
-
}
-
cout << endl;
-
}
-
-
bool
-
single_dight(const int &val)
-
{
-
return val > 10;
-
}
-
-
bool
-
is_near(int first, int second)
-
{
-
return(fabs(first - second) < 5);
-
}
-
-
bool
-
reverse(int first, int second)
-
{
-
return((first -second) > 0);
-
}
-
-
int
-
main(void)
-
{
-
list<int> first(2, 10);
-
list<int> second(2, 20);
-
list<int>::iteratorit;
-
-
-
it = first.begin();
-
first.splice(it, second);
-
print(first);
-
if(second.empty())
-
{
-
cout << "Secondis empty" << endl;
-
}
-
else
-
{
-
cout << "Secondis not empty" << endl;
-
}
-
-
cout << *it << endl;
-
second.splice(second.begin(), first, it);
-
print(second);
-
-
it = first.begin();
-
advance(it, 2);
-
print(first);
-
first.splice(first.begin(), first, it, first.end());
-
print(first);
-
-
-
cout << "Beforeremove : ";
-
print(first);
-
first.remove(10);
-
cout << "Afterremove : ";
-
print(first);
-
-
-
cout << "Beforeremove_if : ";
-
first.push_back(10);
-
print(first);
-
first.remove_if(single_dight);
-
cout << "Afterremove_if : ";
-
print(first);
-
-
-
first.push_back(20);
-
first.push_back(20);
-
first.push_back(21);
-
cout << "Beforecall unique() : ";
-
print(first);
-
first.unique();
-
cout << "Aftercall unique() : ";
-
print(first);
-
-
cout << "Beforecall unique() : ";
-
print(first);
-
first.unique(is_near);
-
cout << "Aftercall unique() : ";
-
print(first);
-
-
-
first.push_back(5);
-
first.push_back(12);
-
first.sort();
-
print(first);
-
second.push_back(9);
-
second.push_back(17);
-
second.sort();
-
print(second);
-
-
first.merge(second);
-
print(first);
-
-
-
first.sort(reverse);
-
print(first);
-
-
-
first.reverse();
-
print(first);
-
return(0);
-
}
C++ list模板类介绍,布布扣,bubuko.com
C++ list模板类介绍
标签:style blog class c code tar
原文地址:http://blog.csdn.net/zhangliang_571/article/details/26143631