• c++ 13


    一、向量
    ...
    10.size/resize/clear/capacity/reserve
    1)向量的大小可增可减,使向量大小改变的函数包括:resize/push_back/pop_back/clear/insert/erase。
    2)向量的容量只增不减,只能通过reserve函数手动改变向量的容量。
    3)向量的大小的增加可以引发容量的增加,但是容量的改变不会引起大小的变化。
    4)通过resize()函数增加向量的大小,对于基本类型元素初始化为0,对于类类型元素用无参构造初始化。减少向量的大小,对于类类型元素会导致析构。
    5)通过reserve()函数增加向量的容量,但是新增部分既不会初始化,也不会调用构造函数。
    6)位于向量大小范围以外的元素,可以通过下标访问,但是其值是未定义的。
    7)通过resize()/reserver()函数所做的改变都发生在向量的尾部。
    11.insert/erase/::find/::sort
    1)insert/erase通过迭代器参数表示插入/删除位置,而且这两个函数会改变容器的大小。
    2)::find在通过两个迭代器器参数表示查找的范围,找到了就返回匹配元素的迭代器,找不到就返回查找范围的下限迭代器。
    3)::sort有两个版本,其中两参版本用“<”做比较,三参版本用比较器函数对象做比较。
    4)如果某种操作引起向量发生结构性的改变,之前所获得的迭代器将会失效,必须重新初始化。
    12.类类型的向量
    1)向量中的元素类可能需要支持:无参构造、拷贝构造、拷贝赋值、==、<。
    2)借助比较器对象可以实现更为灵活的排序规则。
    3)当一个容器被析构时,元素类型析构函数会被自动调用。
    void foo (void) {
      vector<Student> vs;
      vs.push_back (...);
      vs.push_back (...);
      vs.push_back (...);
      ...
    }
    vector<Student>* pvs =
      new vector<Student>;
    pvs -> push_back (...);
    pvs -> push_back (...);
    pvs -> push_back (...);
    ...
    delete pvs;
    vector<Student*>* pvs =
      new vector<Student*>;
    pvs -> push_back (new Student (...));
    pvs -> push_back (...);
    pvs -> push_back (...);
    ...
    for (vector<Student*>::iterator it =
      pvs -> begin (); it != pvs.end ();
      ++it)
      delete *it;
    delete pvs;
    练习:根据电影票房记录生成TOP10榜单。
    输入文件:movies.dat
    输出文件:top10.dat (票房前10位,按票房收入从高到低的顺序排列)

    二、双端队列(deque)
    1.向量所有的功能双端对列几乎都有,极少数不支持,如reserve等。
    2.双端队列相对于向量增加在序列首部的压入和弹出接口:push_front/pop_front,而且其效率与在尾部做相应的动作一样高效。
    3.为了维持两端的开放性,需要更复杂的动态内存管理,因此双端队列的空间和时间复杂度比向量略高。

    三、列表(list)
    1.sort - 排序
    2.unique - 将连续出现相同元素唯一化
    10 20 20 50 20 30
    | unique ()
    V
    10 20 50 20 30
    3.splice - 划分,将参数列表的一部分或全部划分到调用列表中。
    参数列表:10 20 30 40 50
    调用列表:0 100
    | splice
    V
    参数列表:10 50
    调用列表:0 20 30 40 100
    4.merge - 合并,将有序的参数列表合并到有序的调用列表中,使调用列表保持有序。

  • 相关阅读:
    模拟Linux修改实际、有效和保存设置标识
    ubuntu中桌面图标的配置
    硬盘安装ubuntu
    关于NumPy
    关于Spring JavaWeb工程中的ContextRefreshedEvent事件
    MySQL中Index Merge简介
    InetlliJ IDEA的快捷键及各种配置
    Java语言中的正则表达式
    Git使用笔记
    linux中添加常用应用程序的桌面图标
  • 原文地址:https://www.cnblogs.com/elisha-blogs/p/3780724.html
Copyright © 2020-2023  润新知