• C++标准库


    C++总结-标准库

    一、   容器

    1.  顺序容器

    1)        定义,初始化,赋值

    初始化:

    a)        默认构造函数(最常用的方式)

    b)        用其他相同容器初始化,包括用容器本身,或用迭代器

    c)        能构造拥有n相同元素容器的构造函数,包括有元素或默认元素的形式

    赋值:

    a)        使用重载的“=”。

    b)        使用容器函数assign( )。

    c)        使用容器函数swap( ),具有较高的性能(事实上只交换某些内部指针),这个函数的功能是交换两个容器内的函数。

           

    2)        操作

    添加:

    a)        尾部插入元素,push_back( )。

    b)        头部插入元素,push_front( ),只适用于list和deque。

    c)        任意位置插入元素,insert( ),要指明插入的位置和插入的元素.

    d)       任意位置插入另个容器或容器中的元素,splice( ),只适用list

    删除:

    a)        删除尾元素,pop_back( )

    b)        删除头元素,pop_front( ),只适用于list和deque

    c)        删除任意位置元素,erase( ),参数是迭代器。

    d)       删除特定值或判断值为true的元素,remove(), remove_if(), 只适用list

    e)        全部清空,clear( )

    大小:

    a)        获得容器中元素的个数size( )

    b)        重新设定容器的大小,resize( )

    c)        已经分配的空间能够存储元素的个数capacity( ), 只有vector有

    d)       设置预留的额外的存储空间中元素的个数reserve( ),只有vector有

    关系:

    a)        比较的容器必须具有相同的容器类型和其元素类型。

    b)        容器的比较是基于容器内的元素的比较。

    c)        包括常用的比较操作符==,!=,<,<=,>,>=。采用字典式顺序比较原则。

    3)        访问

    函数:调用时,容器不能为空。

    a)        返回容器最后一个元素,back( )

    b)        返回容器第一个元素,front( )

    下标:只适用于vector和deque

    a)        c[n]:不会进行范围检查,如果越界,会引发未定义行为。

    b)        at(n):会进行范围检查,如果溢出,则会抛出out_of_range异常

    迭代器:

    4)        类型别名:

    整形:size_type, diference_type

    迭代器类型:iterator, const_iterator, reserve_iterator

    引用:reference, const_reference

    2.            关联容器(set,multimap,multiset均不支持下标操作)

    1)        定义,赋值,初始化

    初始化:

    a)        默认构造函数。

    b)        用相同类型的容器初始化,包括容器本身或是迭代器。

    c)        使用指定的排序准则初始化。

    赋值:

    a)        使用重载的“=”。

    b)        互换两个容器的元素,使用容器函数swap( )。

    2)      操作

    添加:

    a)        使用下标操作来进行添加,只适用于map。

    b)        使用insert( )函数,要指明插入的元素,注意对函数返回值的应用

    删除:

    a)        删除任意位置元素,erease( ),参数可以是元素,也可以是迭代器。

    b)        全部清空,clear( )

    关系:

    d)       比较的容器必须具有相同的容器类型和其元素类型、比较准则。

    e)        容器的比较是基于容器内的元素的比较。

    3)      访问

    a)        迭代器:是双向迭代器。

    二、   迭代器

    1.            迭代器操作(没有特殊标注的表明支持所有标准库容器)

    解引用:

    a)        获得整个元素。

    b)        获得元素中的某个成员。

    算数运算:

    a)        自增,自减 。

    b)        迭代器加减法的复合赋值运算,只适用于vector和deque。

    c)        迭代器加(减)整数,只适用于vector和deque。

    d)       迭代器相互减,只适用于vector和deque。

    关系:

    a)        比较是否相等。

    b)        大于(等于)或小于(等于),只适用于vector和deque。

    2.            迭代器种类

    a)        常规迭代器:iterator,用begin( ), end( ) 赋值

    b)        反向迭代器:reverse_iterator, 用rbegin( ), rend( ) 赋值

    c)        插入迭代器:back_inserter, front_inserter, inserter,用容器对象初始化。

    d)       iostream迭代器:ostream_iterator, istream_iterator,用容器对象初始化。

    3.            迭代器与const结合,范围,失效

    a)        const与迭代器,const_iterator:自身能改变,但是不能用了改变其所指向的元素的值。const 的iterator对象是说不能改变iterator的自身,但是可以用了改变所指向的元素的值。

    b)        失效:

    c)        范围:左闭右开。

    三、   算法

    1.            概述

    a)        泛型算法只单独依赖迭代器和迭代器操作实现,本身不执行容器操作。

    b)        算法从不直接添加或删除元素,但可以改变存储在容器中的元素的值,也可以再容器内移动元素。

    2.            算法分类

    1)        只读算法

    a)        Find( )

    b)        Accumulate( ): 对要累加的元素类型一无所知

    c)        Find_fisrt_of( ): 查找任意元素。

    2)        写容器元素的算法

    a)        写入输入序列的元素,fill( ),replace( )

    b)        不检查写入操作的算法,fill_n( )

    c)        写入到目标迭代器的算法,copy( ),replace_copy( )       

    3)        对容器元素重新排序的算法

    a)        去除重复,unique( )

    b)        排序算法,sort( ),stable_sort( )

    3.            算法的结构

    a)        按对元素的操作对算法分类。

    b)        算法的形参模式。

    c)        算法的两种函数命名和重载的规范定义。

    四、   String类型

    1.            定义、初始化、赋值(其他许多函数的参数类型都与string构造函数的类型相同和相识)

    初始化:

    a)        默认构造函数。

    b)        令一个string类型进行初始化:

                                                        i.              String对象初始化。

                                                      ii.              指向string对象的一对迭代器初始化。

                                                    iii.              String对象和其中的一个下标。

                                                    iv.              String对象、下标和长度。

    c)        C字符串类型:

                                                          i.              C风格字符串直接初始化。

                                                        ii.              C风格字符串和长度。

    d)       n个相同字符进行初始化(不包括只需要一个长度参数的构造函数)。

    赋值:

    a)        等号赋值,被赋值的可以使string类型,也可是是c风格字符串。

    b)        Swap( )函数,能够交换两个string类型。

    c)        Assign( )赋值函数。

    2.            String的操作

    添加:

    a)        Push_back( ),在string尾部添加字符。

    b)        Insert( ),在string任意位置添加字符。

    删除:

    a)        Erase( ):删除指定元素。

    b)        Clear( ):清空元素。

    大小:

    a)        获得容器中元素的个数size( )

    b)        重新设定容器的大小,resize( )

    c)        已经分配的空间能够存储元素的个数capacity( )

    d)       设置预留的额外的存储空间中元素的个数reserve( )

    查找:

    a)        精确查找:find( ),rfind( )。

    b)        任意查找:find_first_of( ),  find_last_of( ),   find_first_not_of( ), find_last_not_of( )

    关系:

    a)        支持所有的关系操作符,(个人认为这些比较是基于char类型的比较,也就是ascii码的比较)。

    b)        Compare(),根据返回值判断比较的结果。

    String特有操作:

    a)        Substr( ),返回当前string对象的子串。

    b)        Append( ),在string对象的末尾添加字符串。

    c)        Replace( ),将指定字符插入到指定位置,从而替换string对象中已经存在的字符串。

    3.            访问

    迭代器:

    下标:

    a[n]或at(n)

    五、   具体容器

    1.      Vector

    支持随机存取。在末端附加或删除元素性能很好,在前端或中间插入或删除元素性能较低。

    2.      Deque

    不提供容量操作(capacity(),reserve()),提供头部的插入和删除操作(push_front(),pop_front())

    3.      List

    不支持随机存取。Deque迭代器是双向迭代器(而非随机)在任何位置插入或删除元素都非常快。安插和删除元素不会使指向其他元素的各个pointers,referencs,iterators,失效。不支持容量或空间重新分配的函数(capacity(),reserve())。提供了一些特殊的成员函数,专门用于移动元素,较之同名的stl通用算法,这些函数执行更快。

    特殊变动操作:

    Unique(): 移除相邻而且数值相等的重复元素。

    Splice(): 插入另一个容器或另一个容器中的元素。

    Sort( ):排序。

    Merge( ):归并。

    Reserve( ):反序。

    4.      Set和multiset

    Set和multiset通常以平衡二叉树来完成。

    不能改变元素值,这样会打乱原本的顺序。

    由于迭代器是双向迭代器,对于只能用于随机存取迭代器的stl算法set和multiset则不能用。由于所有元素都不能改变,于是无法对set和multiset调用变动性算法。

    不同排序准则(元素类型相同)引起的型别不同:这种情况,两种容器不能直接相互赋值或比较。这种容器的比较只能用比较算法,而不能用关系操作符。但是这两种容器可以相互初始化,因为初始化时有用的知识是容器中的元素,排序准则并不起作用。

    特殊的搜索函数:

    Count(elem) 返回元素elem的元素个数。

    Find(elem) 返回元素elem的第一个元素。

    Lower_bound(elem) 返回elem的第一个可安插位置。

    Upper_bound(elem) 返回elem的最后一个可安插位置。

    Equal_range(elem) 返回一个pair,表示 elem可安插的第一个位置和最后一个位置。

    5.      Map和multimap

    Map和multimap通常以平衡二叉树完成。

    Map和multimap拥有set和multiset的所有能力和所有操作函数。

    Map和multimap与set和multiset的区别是:首先,map和multimap的元素时pair类型,其次map可作为关联式数组来运用。

    创造value的三种方法:运用vaule_type,运用pair<>,运用make_pair()。

    Non—const maps提供了下标操作,支持元素的直接存取。和一般数组的区别是:索引可以是任意型别的,而且如果你要使用某个key作为索引,而容器中尚未存放对应元素,那就会自动安插该元素。

  • 相关阅读:
    机试指南
    Python 切片与深拷贝
    list去重,求差集,保持顺序不变
    python--coding
    python --cookbook
    H5py文件
    面向对象
    企业微信和微信公众号获取wx.config的安卓和ios的区别----踩坑
    vue+vant实现上拉加载下拉刷新(访问后台逻辑)
    vue实现前端跨域问题
  • 原文地址:https://www.cnblogs.com/yts1dx/p/2920552.html
Copyright © 2020-2023  润新知