程序员

标准模板库(STL)之 list 用法【初级】

2020-07-29  本文已影响0人  Aliven888

背景

1、简介

2、特点

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 删除操作

//clear()
m_iList.clear();   //清空list缓存,全部清空

//remove()
//0,1,2,3,3,2 清理后 0,1,2,2 
//清除了所有值为 3 的元素,可见这里是以元素对象进行的清除
m_iList.remove(3);

4.3、判断 list 是否为空

//在从m_iList中取值时,需要判断一下m_iList是否为空,
//在不为空的情况下再去操作m_iList,以免内存空间使用异常。
if (!m_iList.empty())  //判断是否为空,为空返回true
{...}

4.4、向 list 中添加一个元素

/*****************************************************
* 功 能 : 添加元素
*
* 参  数: OUT int& element : 添加的元素
*          IN bool bFront : 是否从前面添加元素,默认 true
* 返回值:void
*
* 说 明:push_front(...) : 从前面添加
*        push_back(...)  : 从后面添加
* 
* 作 者:Aliven888
*****************************************************/
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 中头/尾的元素

/*****************************************************
* 功 能 : 获取元素
*
* 参  数: OUT int& element : 取出的元素
*          IN bool bFront : 是否从前面获取元素,默认 true
*
* 返回值:void 
*
* 说 明:front() : 获取头部第一个元素的值
*        pop_front() :删除头部第一个元素
*        back() : 获取尾部第一个元素的值
*        pop_back() :删除尾部第一个元素
*
* 作 者:Aliven888
*****************************************************/
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
*
* 说 明:
*
* 作 者:Aliven888
*****************************************************/
void CSTLListClass::traverseElement()
{
    //定义迭代器
    list<int>::iterator beginIter = m_iList.begin();
    list<int>::iterator endIter = m_iList.end();

    //循环遍历
    for (; beginIter != endIter; ++beginIter)
    {
        cout << *beginIter << endl;  //Windows C++打印
        qDebug("m_iList current value is [%d]", *beginIter); //Qt C++ 打印
    }
}

4.7、list 元素去重

/*****************************************************
* 功 能 : 去除重复元素
*
* 参  数:无
*
* 返回值:void
*
* 说 明:这里清除重复指的是并列重复,每次都是和前一个元素相较,
*       (并不是和前面的全部元素相比较),发现重复了就清除掉。
*        比如: 0 1 2 3 3 2 处理后就是 0 1 2 3 2
*   
* 作 者:Aliven888
*****************************************************/
void CSTLListClass::uniqueElement()
{
    m_iList.unique();
}

4.8、list 排序

/*****************************************************
* 功 能 : 给list排序
*
* 参  数:
*
* 返回值:void
*
* 说 明: front ---> back
*         2,3,3,2,1,0 排序后 0,1,2,3,3,2
*         通过上面的举例我们可以看出,sort() 排序后,小值在 front 一端
*
* 作 者:Aliven888
*****************************************************/
void CSTLListClass::sortElement()
{
    m_iList.sort();
}
上一篇 下一篇

猜你喜欢

热点阅读