• 16.4.5 容器种类(上:容器概念)


    STL具有容器概念和容器类型。

    概念是具有名称(如容器、序列容器、关联容器等)的通用类别;

    容器类型是可用于创建具体容器对象的模板。

    一起的11个容器类型分别是:

    1. deque
    2. list
    3. queue
    4. priority_queue
    5. stack
    6. vector
    7. map
    8. multimap
    9. set
    10. multiset
    11. bitset

    C++11取消了bitset容器,将其视为独立的类别,新增了:

    1. forward_list
    2. unordered_map
    3. unordered_multimap
    4. unordered_set
    5. unordered_multiset

     没有与基本容器概念对应的类型,但概念描述了所有容器类都通用的元素。

    它是一个概念化的抽象基类——说它概念化,是因为容器类并不真正使用继承机制。

    存储在容器中的数据为容器所有,这意味着当容器过期时,存储在容器中的数据也将过期。

    不能将任意类型的对象存储在容器中,具体的说,类型必须是可复制构造的和可赋值的(没有将复制构造函数

    和赋值运算符声明为私有的和保护的,则也满足此要求)。

    所有的容器都提供某些特征和操作。

    一些基本的容器特征:

    表达式 返回类型 说明 复杂度
    X::iterator 指向T的迭代器类型 满足正向迭代器要求的任何迭代器 编译时间
    X::value_type T T的类型 编译时间
    X u;   创建一个名为u的空容器 固定
    X();   创建一个匿名的空容器 固定
    X u(a);   调用复制构造函数后u==a 线性
    X u = a;   作用同X u(a); 线性
    r = a; X& 调用赋值运算符后r==a 线性
    (&a)->~X() void 对容器中每一个元素应用析构函数 线性
    a.begin() 迭代器 返回指向容器第一个元素的迭代器 固定
    a.end() 迭代器 返回超尾值迭代器 固定
    a.size() 无符号整数 返回元素个数,等价于a.end()-a.begin() 固定
    a.swap(b) void 交换a和b的内容 固定
    a == b 可转换为bool

    如果a和b的长度相同,且a中每个元素都等于(==为真)b中

    相应的元素,则为真

    线性
    a != b 可转换为bool 返回!(a==b) 线性

     复杂度描述了执行操作所需的时间。从快到慢依次为:

    1. 编译时间
    2. 固定时间
    3. 线性时间

    复杂度要求是STL特征,虽然实现细节可以隐藏,但性能规格应公开,以便程序员能够知道完成特定操作的计算

    成本

  • 相关阅读:
    [Leetcode] Distinct Subsequences
    [Leetcode] Restore IP Addresses
    [Leetcode] Substring with Concatenation of All Words
    [Leetcode] Palindrome Partitioning II
    [Leetcode] Palindrome Partitioning
    [Leetcode] Maximal Rectangle
    [Jobdu] 题目1493:公约数
    [Leetcode] Merge k Sorted Lists
    [Leetcode] Gray Code
    opencv2-新特性及Mat
  • 原文地址:https://www.cnblogs.com/suui90/p/13546789.html
Copyright © 2020-2023  润新知