• STL——vector和list


            vector和list为STL中的顺序容器,顺序容器会依次维护第一个到最后一个元素,在顺序容器上,我们主要的操作就是迭代。

    头文件:
    #include<vector>
    #include<list>
    1、vector
    特点:
    连续存储结构
    随机访问和尾端插入删除操作效率高
    动态的内存空间扩展(与内建数据的区别)
    内存分配原理:
    首先分配一块内存空间进行预备存储,当存储元素所需内存超过这个空间之后,则再整体重新分配一个更大的存储空间。扩充空间的过程如下:
    (1)分配一块新的内存空间;
    (2)将原空间内的元素复制到新空间中;
    (3)释放原来的存储空间
    size()返回的是当前存储的元素个数;
    capacity()返回的是当前可存储的元素个数(即预分配存储空间的大小);

    成员函数:
    c.assign(beg,end)             将[beg; end)区间中的数据赋值给c。 
    c.assign(n,elem)              将n个elem的拷贝赋值给c。
    c.at(idx)                     传回索引idx所指的数据,如果idx越界,抛出out_of_range。
    c.back()                      传回最后一个数据,不检查这个数据是否存在。
    c.begin()                     容器中第一个元素的迭代器。
    c.capacity()                  返回容器最大存储容量。
    c.clear()                     移除容器中所有数据。
    c.empty()                     判断容器是否为空。
    c.end()                       容器中最后一个元素下一个地址迭代器。
    c.erase(pos)       删除pos位置的数据,传回下一个数据的位置。
    c.erase(beg,end)              删除[beg,end)区间的数据,传回下一个数据的位置。
    c.front()                     传回第一个数据。
    c.insert(pos,elem)            在pos位置插入一个elem拷贝,传回新数据位置。
    c.insert(pos,n,elem)          在pos位置插入n个elem数据。无返回值。
    c.insert(pos,beg,end)         在pos位置插入在[beg,end)区间的数据。无返回值。
    c.max_size()                  返回容器中最大数据的数量。
    c.pop_back()                  删除最后一个数据。
    c.push_back(elem)             在尾部加入一个数据。
    c.rbegin()                    传回一个逆向队列的第一个数据迭代器。
    c.rend()                      传回一个逆向队列的最后一个数据的下一个位置迭代器。
    c.resize(num)                 重新指定容器的长度。
    c.reserve()                   保留适当的容量。
    c.size()                      返回容器中实际数据的个数。
    c1.swap(c2)                   将c1和c2元素互换。
    swap(c1,c2)                   同上操作。


    构造函数与析构函数:
    vector<Elem> c
    vector <Elem> c1(c2)
    vector <Elem> c(n)
    vector <Elem> c(n, elem)
    vector <Elem> c(beg,end)
    c.~ vector <Elem>()

    2、list
    特点:
    非连续存储结构,底层为双链表实现
    每个结点包括本元素值、前向指针、后向指针,额外的指针维护带来更多的内存开销
    随机插入删除效率高,随机访问效率低
    不支持下标操作([])和.at()操作


     list成员函数:
    assign() 给list赋值
    back() 返回最后一个元素
    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中重复的元素
  • 相关阅读:
    读《万历十五年》和《一个广告人的自白》
    Windows Phone开发(26):启动器与选择器之MediaPlayerLauncher和SearchTask
    Windows Phone开发(24):启动器与选择器之发送短信
    Windows Phone开发(25):启动器与选择器之WebBrowserTask
    linux服务器,svn认证失败,配置问题,防火墙等等
    nginx 防火墙、权限问题
    本地phpstudy开发中apache可以用,nginx不可用,
    nginx https配置后无法访问,可能防火墙在捣鬼
    为了解决linux配置Nginx 只能关闭防火墙才能访问的问题
    搜集点shell资料 规格严格
  • 原文地址:https://www.cnblogs.com/fangyan5218/p/10618262.html
Copyright © 2020-2023  润新知