• C++的容器(一):c++中所有容器的共通操作函数


    C++中的所有容器都支持三个核心能力:

    1. 所有容器提供的都是‘value语义’而非‘reference语义’。可以通过指针元素来实现某些功能。
    2. 容器的所有元素有一个固定的次序(order),你可以以相同的次序多次遍历每个元素。并且每个容器也提供“迭代器生成器”函数,运用这些生成的迭代器可以遍历整个容器。
    3. 你无法保证程序的每个操作都安全。操作者必须确保操作函数的参数都符合要求,因为容器不会抛出异常。

    容器(Container)的共通操作函数集(使用ContType表示所有容器类型):

    函数功能
    ContType c 产生一个不含有任何元素的空容器
    ContType c1(c2)  产生一个一模一样的容器,所有元素都是按值复制的
    ContType c(beg, end) 复制p[beg, end)区间内的元素,作为容器初值
    c.~ContType()   删除所有元素
    c.size() 返回容器中的元素数量
    c.empty() 判断容器是否为空,相当于(size()==0),但这个函数可能更快
    c.maxsize() 返回元素的最大可能数量
    c1==c2 判断是否c1等于c2
    c1!=c2 判断是否c1不等于c2
    c1 < c2 判断是否c1小于c2
    c1 > c2 判断是否c1大于c2
    c1 <= c2 判断是否c1小于等于c2
    c1 >= c2 判断是否c1大于等于c2
    c1 = c2 将c2的元素拷贝复制给c1
    c1.swap(c2) 将c1和c2的值做个交换
    swap(c1, c2) 这是个全局函数,功能同上
    c.begin() 返回一个迭代器,指向第一个元素
    c.end() 返回一个迭代器,指向最后一个元素的下一位置,它并不指向最后一个元素
    c.rbegin() 返回一个迭代器,指向倒数第一个元素
    c.rend() 返回一个迭代器,指向第一个元素的前一位置,它并不指向第一个元素
    c.insert(pos, elem) 将elem的一个副本安插于pos处,返回值和pos的意义并不相同
    c.erase(beg,end) 移除[beg, end)区间内的所有元素,某些容器会返回没有被移除的第一个元素
    c.clear() 移除所有元素,令容器为空
    c.get_allocator() 返回容器的内存模型(memory model)

    以下为一些实例,对上述部分函数做个说明:

    构造函数(从区间中拷贝元素):

    int array[] = {1,2,32,3,4,5};
    set<int> s(array, array+sizeof(array)/sizeof(array[0]));

    构造函数(从标准输入装置读取元素完成初始化操作,标准输入装置方法见博客):

    std::deque<int> d((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
    //注意std::istream_iterator<int>(std::cin)这条语句在c++中是个声明,不能作为参数,需要在两边加上(),表示这是一个表达式。

    交换函数(c1.swap(c2)) / swap(c1, c2) ):

    采用赋值构造函数来创建新的容器,之后源容器就不再使用了,这样赋值构造函数会再生成每个元素的拷贝,然后将源容器中的每个元素再删除掉。而且随着元素个数的增长,所需的时间也会增长(O(n)),而如果使用swap()函数,所做的操作仅仅是将两个容器内部的某些指针(指向元素、配置器)进行交换,所需时间为常数时间(O(C))。这就是swap函数的一个应用场景。

  • 相关阅读:
    简单工厂模式_C#_设计模式
    单例模式_C#设计模式
    快速排序_排序算法_算法
    关于缓存C#
    网络编程的4种IO模型
    一些自己总结
    驱动漏洞中的__try和ProbeForRead
    poj2318
    poj1113
    poj 1904
  • 原文地址:https://www.cnblogs.com/mindulmindul/p/12225813.html
Copyright © 2020-2023  润新知