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================

  • 相关阅读:
    Redis源代码分析(十三)--- redis-benchmark性能測试
    kvm中运行kvm
    umount.nfs device busy day virsh extend diskSpace, attachDisk
    ultravnc
    openNebula dubug
    maintenance ShellScripts
    virsh VMI deploy data serial xml
    cloud computing platform,virtual authentication encryption
    基于C 的libvirt 接口调用
    storage theory
  • 原文地址:https://www.cnblogs.com/sylar-liang/p/4276224.html
Copyright © 2011-2022 走看看