您现在的位置是:首页 > 技术文章网站首页技术文章

[STL]认识list

  • WangYe
  • 2020-08-02 15:14:26
  • 1166 次阅读
STL中的list认识

特点:

    1. 双向链表;

    2. 没有空间预留习惯,所以每分配一个元素都会从内存中分配,每删除一个元素都会释放它占用的内存。

    3. 在哪里添加删除元素性能都很高,不需要移动内存,当然也不需要对每个元素都进行构造与析构了,所以常用来做随机插入和删除操作容器。

    4. 访问开始和最后两个元素最快,其他元素的访问时间一样。


创建对象:

    1. list<int> L1;

    2. list<int> L2(10);


优缺点和使用场景:

    优点:内存不连续,动态操作,可在任意位置插入或删除且效率高。
    缺点:不支持随机访问。
    适用场景:适用于经常进行插入和删除操作并且不经常随机访问的场景。


基本操作:

    (1)元素访问

lt.front();
lt.back();
lt.begin();
lt.end();

    (2)添加元素

lt.push_back(elem);//在容器尾部加入一个元素
lt.pop_back();//删除容器中最后一个元素
lt.push_front(elem);//在容器开头插入一个元素
lt.pop_front();//从容器开头移除第一个元素
lt.insert(pos,elem);//在pos位置插elem元素的拷贝,返回新数据的位置。
lt.insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。
lt.insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。
lt.clear();//移除容器的所有数据
lt.erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。
lt.erase(pos);//删除pos位置的数据,返回下一个数据的位置。
lt.remove(elem);//删除容器中所有与elem值匹配的元素。


实例:

以下例子产生一个空 list,准备放置字符,然后将 'a' 至 'z' 的所有字符插入其中,利用循环每次打印并移除集合的第一个元素,从而打印出所有元素:

#include <iostream>
#include <list>
using namespace std;

int main(int argc,char* argv[])
{
    list<char>listTemp;
    
    for(char c = 'a';c <= 'z';++c)
        listTemp.push_back(c);
        
    while(!listTemp.empty())
    {
        cout << listTemp.front() << "";
        listTemp.pop_front();
    }
    return 0;
}

成员函数empty()的返回值告诉我们容器中是否还有元素,只要这个函数返回 false,循环就继续进行。循环之内,成员函数front()会返回第一个元素,pop_front()函数会删除第一个元素。

注意:list<指针> 完全是性能最低的做法,还不如直接使用 list<对象> 或使用 vector<指针> 好,因为指针没有构造与析构,也不占用很大内存。


sort()函数/merge()函数/splice()函数:

    1. sort()函数就是对list中的元素进行排序;

    2. merge()函数的功能是:将两个容器合并,合并成功后会按从小到大的顺序排列;

            比如:lt1.merge(lt2); lt1容器中的元素全都合并到容器lt2中。

    3. splice()函数的功能是:可以指定合并位置,但是不能自动排序!


这些函数用到的次数较少,要用时再加深印象!!

TAG: STL list

上一篇:[STL]认识deque

下一篇:[STL]认识set

文章评论 (0)



Top