介绍:
list实际是一个双向链表,可以高效的进行插入删除操作。
使用:
1、头文件
#include <list>
2、初始化
list<int> a{1,2,3};
list<int> a(n); //声明一个n个元素的列表,每个元素都是0
list<int> a(n, m); //声明一个n个元素的列表,每个元素都是m
list<int> a(first, last); //声明一个列表,其元素的初始值来源于由区间所指定的序列中的元素,first和last是迭代器
3、基本操作
(1). 容量
大小: lst.size();
最大容量: lst.max_size();
更改大小: lst.resize();
判空: lst.empty();
(2). 修改
多个元素赋值: lst.assign(); //类似于初始化时用数组进行赋值
末尾添加元素: lst.push_back();
末尾删除元素: lst.pop_back();
任意位置插入元素: lst.insert();
任意位置删除元素: lst.erase();
清空元素: lst.clear();
(3)排序
lst.sort();
(4)迭代器开始指针:lst.begin();
末尾指针:lst.end(); //指向最后一个元素的下一个位置
(5)查找
std::find(lst.begin(),lst.end(), info);
4、例程
#include "stdafx.h"
#include <list>
#include <algorithm>
bool Comp(const int& a, const int& b) {
return a > b;
}
int main(int argc, char* argv[])
{
std::list<int> lst;
int i;
printf("lst.size() = %d\r\n", lst.size());
printf("lst.max_size() = %d\r\n", lst.max_size());
printf("lst.empty() = %d\r\n", lst.empty());
lst.resize(10);
printf("lst.size() = %d\r\n", lst.size());
printf("lst.max_size() = %d\r\n", lst.max_size());
printf("lst.empty() = %d\r\n", lst.empty());
std::list<int>::iterator it = lst.begin();
printf("loop printf:\r\n");
for(;it != lst.end(); ++it)
{
printf("value = %d \r\n", *it);
}
lst.clear();
printf("clear lst.size() = %d\r\n", lst.size());
lst.assign(10, 0xF);
printf("assign loop printf:\r\n");
it = lst.begin();
for(;it != lst.end(); ++it)
{
printf("value = %d \r\n", *it);
}
it = lst.begin();
for(i = 9;it != lst.end(); ++it, i--)
{
*it = i;
}
it = lst.begin();
printf("loop printf:\r\n");
for(;it != lst.end(); ++it)
{
printf("value = %d \r\n", *it);
}
lst.sort();
it = lst.begin();
printf("sort loop printf:\r\n");
for(;it != lst.end(); ++it)
{
printf("value = %d \r\n", *it);
}
it = std::find(lst.begin(), lst.end(), 5);
if(it != lst.end())
{
printf("find 5 succ \r\n");
}
else
{
printf("find 5 fail \r\n");
}
it = std::find(lst.begin(), lst.end(), 10);
if(it != lst.end())
{
printf("find 10 succ \r\n");
}
else
{
printf("find 10 fail \r\n");
}
lst.push_back(10);
printf("push_back loop printf:\r\n");
it = lst.begin();
for(;it != lst.end(); ++it)
{
printf("value = %d \r\n", *it);
}
lst.pop_back();
printf("pop_back loop printf:\r\n");
it = lst.begin();
for(;it != lst.end(); ++it)
{
printf("value = %d \r\n", *it);
}
it = lst.begin();
it ++;
lst.erase(it);
printf("erase loop printf:\r\n");
it = lst.begin();
for(;it != lst.end(); ++it)
{
printf("value = %d \r\n", *it);
}
it = lst.begin();
it ++;
lst.insert(it, 1);
printf("insert loop printf:\r\n");
it = lst.begin();
for(;it != lst.end(); ++it)
{
printf("value = %d \r\n", *it);
}
return 0;
}