zoukankan      html  css  js  c++  java
  • 容器

    1.顺序容器(序列式容器):

    vector:支持快速随机访问

    list:支持快速插入/删除

    deque:双端队列

    关联式容器:set,multiset,map,multimap

    顺序容器适配器
    stack:后进先出(LIFO)堆栈

    queue:先进先出(FIFO)队列

    priority_queue:有优先级管理的队列

    PS:将一个容器复制给另一个容器时类型必须匹配:容器类型和元素类型都必须相同。

    尽管不能直接将一种容器内的元素复制给另一种容器,但系统允许通过传递一堆迭代器间接实现该功能。

    如:

    vector<int> ivec;

    list<int> ilist<ivec>; // error

    vector<double> dvec(ivec); // error

    list<string> slist(svec.begin(), svec.end()); // ok

    关系操作符只适用于vector和deque的迭代器。

    如: iter+n; > >= < <=

    ilist.begin()+ilist.size()/2; // error.list容器的迭代器既不支持算术运算也不支持关系运算。

    容器定义的类型别名

    size_type:无符号整型,足以存储此容器类型的最大可能容器长度。

    const_iterator:元素的只读迭代器类型

    const_reverse_iterator:元素的只读(不能写)逆序迭代器

    difference_type:足够存储两个迭代器差值的有符号整型,可为负数

    value_type:元素类型

    reference:元素的左值类型,是value_type&的同义词

      

    关键概念:容器元素都是副本。

    >>任何添加(insert/push)或删除(erase,pop_front, pop_back)或resize操作都可能导致迭代器失效。程序必须确保迭代器在每次循环后都得到更新。

    >>赋值和assign操作使左操作数的所有迭代器失效,swap操作则不会使迭代器失效

    assign操作首先会删除容器中原来存储的所有元素,所以不能传指向该容器的迭代器。

    >>不要存储end操作返回的迭代器

    char* cp = "hello"; // 以空字符结尾

    char c_array[] = "world!"; // 以空字符结尾

    char no_null[] = {'H', 'i'}; // 不是以空字符结束.

    string s1(cp); // ok

    string s2(c_array); // ok

    string s3(no_null); // runtime error.

    P451================

  • 相关阅读:
    测试随笔
    ECNU 3530 和你在一起
    ECNU 1030 母牛生小牛
    ECNU 3081 购房还款
    PPP模式下的融资结构优化
    决策树分类
    关联规则-R语言实现
    中国快递包裹总量的预测-基于SARIMA模型
    LeetCode 2 :Swap Nodes in Pairs
    2018092609-2 选题 Scrum立会报告+燃尽图 04
  • 原文地址:https://www.cnblogs.com/sylar-liang/p/4276224.html
Copyright © 2011-2022 走看看