背景
- 以下资料均属于在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。
1、简介
- lsit —— 双向循环列表双链表既可以向前又向后链接他的元素。每一个元素都知道前面一个元素和后面一个元素。
2、特点
- 在标准模板库(STL)中, list 和 vector 一样,是两个最常用的容器。
- 但是,和 vector 不同的是,list不支持对元素的任意存取。在 list 中对元素的存在是通过对齐首元素的操作来实现的,常用函数push_front 和 pop_front,这是和 vector 所不具备的。
- 和 vector 另外一点不同的是,list 的迭代器不会存在失效的情况,他不像 vector 会保留备份空间,在超出容量额度时会重新分配一个内存,导致迭代器失效。而 list 没有备份空间的概念,出、入一个元素就申请一个元素的空间,所以它的迭代器不会失效。
- list 将元素按顺序储存在链表中. 与向量 (vector) 相比, 它允许快速的插入和删除,但是随机访问却比较慢。
3、常用接口函数
* 常用接口:
* assign() 给list赋值
* back() 返回最后一个元素
* begin() 返回指向第一个元素的迭代器
* clear() 删除所有元素
* empty() 如果list是空的则返回true
* end() 返回末尾的迭代器
* erase() 删除一个元素
* front() 返回第一个元素
* get_allocator() 返回list的配置器
* insert() 插入一个元素到list中
* max_size() 返回list能容纳的最大元素数量
* merge() 合并两个list
* pop_back() 删除最后一个元素
* pop_front() 删除第一个元素
* push_back() 在list的末尾添加一个元素
* push_front() 在list的头部添加一个元素
* rbegin() 返回指向第一个元素的逆向迭代器
* remove() 从list删除元素
* remove_if() 按指定条件删除元素
* rend() 指向list末尾的逆向迭代器
* resize() 改变list的大小
* reverse() 把list的元素倒转
* size() 返回list中的元素个数
* sort() 给list排序
* splice() 合并两个list
* swap() 交换两个list
* unique() 删除list中重复的元素
4、接口使用详解
4.1、定义一个list变量
list<int> m_iList;
4.2、list 删除操作
m_iList.clear();
m_iList.remove(3);
4.3、判断 list 是否为空
if (!m_iList.empty())
{...}
4.4、向 list 中添加一个元素
void CSTLListClass::pushElement(IN int element, IN bool bFront)
{
if (!bFront)
{
m_iList.push_back(element);
}
else
{
m_iList.push_front(element);
}
}
4.5、获取 list 中头/尾的元素
void CSTLListClass::popElement(OUT int& element, IN bool bFront)
{
if (!m_iList.empty())
{
if (!bFront)
{
element = m_iList.back();
m_iList.pop_back();
}
else
{
element = m_iList.front();
m_iList.pop_front();
}
}
}
4.6、遍历 list 的元素
void CSTLListClass::traverseElement()
{
list<int>::iterator beginIter = m_iList.begin();
list<int>::iterator endIter = m_iList.end();
for (; beginIter != endIter; ++beginIter)
{
cout << *beginIter << endl;
qDebug("m_iList current value is [%d]", *beginIter);
}
}
4.7、list 元素去重
void CSTLListClass::uniqueElement()
{
m_iList.unique();
}
4.8、list 排序
void CSTLListClass::sortElement()
{
m_iList.sort();
}