zoukankan      html  css  js  c++  java
  • 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函数的一个应用场景。

  • 相关阅读:
    PAT B1027 打印沙漏 (20 分)
    PAT B1025 反转链表 (25 分)
    PAT B1022 D进制的A+B (20 分)
    PAT B1018 锤子剪刀布 (20 分)
    PAT B1017 A除以B (20 分)
    PAT B1015 德才论 (25 分)
    PAT B1013 数素数 (20 分)
    PAT B1010 一元多项式求导 (25 分)
    HDU 1405 The Last Practice
    HDU 1165 Eddy's research II
  • 原文地址:https://www.cnblogs.com/mindulmindul/p/12225813.html
Copyright © 2011-2022 走看看