list是STL中一个比较重要的容器,它有以下几个特点:
1. list中的元素都是双向链接(一个元素与它前后的元素都有联系, 有点像双向链表);
2. list中的元素不能随机访问(无法像访问数组中的元素那样直接任意访问某一个元素);
3. list的内存可以被动态添加(增加一个元素分配一段内存)。
在使用list时, 你需要加载list库(c++中:#include <list> c中:#include <list.h>);
一. list的构造函数:
1. list<int> list_1; //无参构造函数,list的初始大小为0
2. list<int> list_2(3); //定义一个大小为3的list,list中的值默认为0
3. list<int> list_3(5, 1); //定义一个含有5个元素的, 并且元素的值都为的1的list
4. list<int> list_4(list_3); //建立一个与list_3一样的list
5. list<int> list_5(list_2.begin(), list_2.end()); //建立一个与list_2含有相同元素的list
list中常使用的函数:
1. 函数名:push_front(type i);
功能:在调用list的头部添加元素i
2. 函数名:push_back(type i);
功能:在调用list的尾部添加元素i
3.函数名:pop_back();
功能:删除调用list的尾部的元素
4.函数名:pop_front();
功能:删除调用list的头部的元素
5.函数名:remove(type value);
功能:删除调用list中值为value的元素
6.函数名:remove_if(predicate pre);
功能:删除调用list中符合条件的元素
7.函数名:erase(iterator pos);
功能:删除调用list中位置为pos的元素
8.函数名:sort();
功能:对调用list进行升序排序
9.函数名:sort(greater<type>());
功能:对调用list进行降序排列
10.函数名:max_size();
功能:返回调用list的最大可能大小
11.函数名:size();
功能:返回调用list的实际大小
12. 函数名:clear();
功能:清空调用list中的元素
13.函数名:empty();
功能:判断调用list是否为空,空为true,否则为false
14.函数名:resize(int i);
功能:给调用list重新分配大小为i的空间,保留调用list原有的元素;如果i小于调用list的大小,则调用list只保留前i个元素;如果i大于调用list,则多余的为默认值(整形的默认值为0);
15.函数名:resize(int i, type value);
功能:同上,只是默认值变为value
16.函数名:reverse();
功能:翻转调用list中的元素(1,2,3变成3,2,1);
17.函数名:assign(int i, type value);
功能:给调用list重新分配一段空间,空间大小为i, 空间中的元素值都为value.
18.函数名:begin();
功能:返回调用list头部元素的引用。(返回类型为iterator)
19.函数名:end();
功能:返回调用list尾部元素的后像指针, 即调用list尾部元素的后一个空间的引用。(返回类型为iterator)
代码:
#include <iostream>
#include <list>
using namespace std;
list<int> list_1(10); //建立一个长度为10的list, 初始值为0
int show_elements( )
/*显示list中的数组*/
{
list<int>::iterator ite;
for(ite = list_1.begin(); ite != list_1.end(); ite ++)
{
cout << *ite << " ";
}
cout << endl;
return 0;
}
bool judge(int value)
/*判断条件*/
{
return (value < 3);
}
int main()
{
int max_length = list_1.max_size(); //list可能的最大长度
cout << "The max size of list_1 is " << max_length << endl;
int i = 0;
cout << "The primary list : ";
show_elements();
list_1.assign(5,3); //重新分配list_1, list_1含有5个元素,且默认值为3
cout << "After assign : ";
show_elements();
for(i = 0; i < 5; i ++)
list_1.push_front(i); //在list的头部插入数据
cout << "After push element in the front : ";
show_elements();
for(i = 11; i < 18; i ++)
list_1.push_back(i); //在list的尾部插入数据
cout << "After push element in the back : ";
show_elements();
list_1.pop_back(); //删除list的尾部数据
cout << "After pop element in the back : ";
show_elements();
list_1.pop_front(); //删除list头部数据
cout << "After pop element in the front : ";
show_elements();
list_1.remove(3); //删除list中值为3的元素
cout << "After remove 3 : ";
show_elements();
list_1.remove_if(judge); //删除list中符合条件的元素
cout << "After remove the specific element(value < 3) : ";
show_elements();
list<int>::iterator position = list_1.begin();
for(i = 0; i < 2; i ++)
position ++;
list_1.erase(position); //删除特定位置的元素
cout << "After erase third element : ";
show_elements();
list_1.sort(); //升序排列list中的元素
cout << "After ascent sort : ";
show_elements();
list_1.sort(greater<int>()); //降序排列list中的元素
cout << "After descend sort : ";
show_elements();
list_1.reverse(); //翻转list中的元素
cout<<"After reverse : ";
show_elements();
int size = list_1.size(); //list的长度
cout << "The size of list_1 is " << size << endl;
list_1.resize(3); //给list分配长度为6的空间,多余的空间赋0
cout << "After resize : ";
show_elements();
list_1.resize(10, 2); //给list分配长度为10的空间,多余的空间赋2
cout << "After resize : ";
show_elements();
list_1.clear(); //清除list中的元素
cout << "After clear : ";
show_elements();
if(list_1.empty()) //list是否为空
cout << "list_1 is empty" << endl;
else
cout << "list_1 is not empty" << endl;
return 0;
}
运行结果: