zoukankan      html  css  js  c++  java
  • 《C++ Primer》读书记录二

    第二部分 容器和算法  第9章~第11章

    2015年5月13日  星期三 

     第9章 顺序容器 sequential contai顺序容器的定义

    vector<string> svec;
    list<int> ilist;
    deque<double> ddeq; 
    • 容器元素的初始化,将一个容器初始化为另一个容器的副本,初始化为一段元素的副本,分配和初始化指定数目的元素
    • 容器内元素的类型约束:元素必须支持赋值运算,元素类型的对象必须可以赋值。事实上,除了输入输出标注库类型外,其他标准库类型都是有效的容器元素类型
    • 迭代器和迭代器范围
      • 迭代器为所有标准库容器类型提供的运算,*iter,iter->num,++iter,iter1==iter2,iter1!=iter2
      • 迭代器为vector和deque容器提供额外的运算,iter+/-n,iter1+/-=iter2,iter1-iter2,>,>=,<,<=
      • 迭代器范围,beg,end,左闭合区间,[beg,end)
    • 顺序容器的操作
      • 添加元素
        //通用
        c.push_back(text_word);
        c.push_front(t)
        //只适用于list和deque
        c.insert(p,t);
        c.insert(p,n,t);
        c.insert(p,b,e);
      • 容器大小的操作,c.size();c.max_size();c.empty()
      • 访问元素,c.back();c.front();返回元素的引用
      • 删除元素,c.pop_back();c.pop_front()(不适用于vector),c.erase(p);c.erase(b,e);
    • vector容器的自增长,capacity和reserve成员函数
    • 容器的选用,插入操作影响容器的选择,元素访问的影响
      • 如果程序要求随机访问元素,应该使用vector或deque容器
      • 如果程序必须在容器中间插入或删除元素,用list容器
      • 如果程序在容器两侧插入或删除元素,采用deque容器
    • 再谈string类型
      • 构造string对象的其他方法
      • 修改string对象的方法,与容器共存的操作,string特有的操作
      • 只适用string类型的操作,c.substr(pos,n);c.substr(pos);s.substr();append()和replace()函数
      • string类型的查找操作,s.find(args);s.rfind(args)
      • string对象的比较
    • 容器适配器,queue,priority_queue和stack
      • 初始化,stack<int> stk<deq>;将deq的元素拷贝到stk,

    第10章 关联容器 associative container

    关联容器通过键key存储和访问元素,顺序容器则通过元素在容器中的位置顺序存储和访问元素

    • 引言,pair类型
      • pair的创建和初始化,pair<string,string> anon
      • pair对象的操作,直接访问,typedef pair<string,string> Author; Author a1;a1.first;1.second
      • 生成新的pari对象,make_pair()函数生成
    • 关联容器,共享大部分的顺序容器操作,不提供front,push_front,pop_front,back,push_back,pop_back操作
    • map类型
      • 对象的定义,约束:键类型必须支持“小于“操作
        map<k,v> m;
        map<k,v> m(m2);
        map<k,v> m(b,e);
      • map定义的类型,key_type键类型,mapped_type值类型,value_type是pair类型
      • 使用下标访问map
      • 利用insert插入对象
      • 查找并读取map元素,m.count(k);m.find(k)
      • 从map中删除元素,m.erase(k);
    • set类型

        set容器中,value_type不是pair类型,而是与key_type类型相同的类型。set存储的元素仅仅是键,而没有所关联的值,

        与map一样,set容器存储的键也必须是唯一的,而且不能修改

    • multimap和multiset类型
      • 允许一个键对应多个实例
      • 元素的添加和删除,insert,erase
      • 元素的查找,multiset和multimap中元素按照顺序存储,即一个键关联的元素必然相邻存放
        • find和count操作
        • lower_bound(k)不小于k的第一个元素,upper_bound(k)返回大于k的第一个元素,左闭合区间
        • equal_range()函数

    第11章 泛型算法 generic algorithm

    • 概述,每个泛型算法的实现都独立于单独的容器
    • 初窥算法,头文件 #include <algorithm> ,#include <numeric>
      • 只读算法,只读取其输入范围内的元素,而不会写这些元素
      • 写容器元素的算法,写入输入序列的元素,不检查写入操作的操作
      • 对容器元素重新排序的算法
    • 再谈迭代器,除了标准库定义的不依懒于特定容器的迭代器,C++还提供了另外三种迭代器
      • 插入迭代器,insert iterator
        • back_insertor,创建使用push_back实现插入的迭代器
        • front_insertor,使用push_front实现插入
        • insertor,使用insert实现插入操作,产生在指定位置实现插入的迭代器
      • iostream迭代器
        • istream_iterator
        • ostream_iterator 
      • 反向迭代器, reserve iterator反向遍历容器,从最后一个到第一个元素
        • reverse_iterator
        • rbegin(),rend()
      • const迭代器,const_iterator,迭代器不能修改容器中的元素
      • 五种迭代器(根据所提供的操作集分类)
        • 输入迭代器:只读不写,只支持自增运算,要求在这个层次上提供支持的泛型算法包括find,accumulate。istream_iterator是输入迭代器
        • 输出迭代器:写,不读,ostream_iterator,自增
        • 前向迭代器:读和写,自增,需要前向迭代器的泛型算法包括replace
        • 双向迭代器:读和写,支持自增和自减,reverse需要使用双向迭代器
        • 随机访问迭代器:读和写,支持完整的算术运算,sort算法使用随机访问迭代器,vector,deque和string迭代器都是随机访问迭代器
    • 泛型算法的结构
      • 算法的形参模式
        //alg是算法名字,beg和end知道算法操作元素的范围
        //dest,beg2,end2都是迭代器
        alg(beg,end,other parms);
        alg(beg,end,dest,other parms);
        alg(beg,end,beg2,other parms);
        alg(beg,end,beg2,end2,other parms);
    • 容器特有的算法

        list容器上的迭代器是双向而非随机访问,list容器特有的操作和算法?

  • 相关阅读:
    FZU 1759 欧拉函数 降幂公式
    51nod 1126 矩阵快速幂 水
    Codeforces Round #325 (Div. 2) D bfs
    Codeforces Round #379 (Div. 2) A B C D 水 二分 模拟
    Codeforces Round #284 (Div. 2)A B C 模拟 数学
    CentOS 7 rsync
    子进程 已安装 pre-removal 脚本 返回了错误号 1或2 与 子进程 已安装 post-installation 脚本 返回了错误号 1或2
    VirtualBox
    Eclipse 安装 HDFS 插件
    docker log 文件 清理
  • 原文地址:https://www.cnblogs.com/sherPur/p/4558938.html
Copyright © 2011-2022 走看看