精华内容
下载资源
问答
  • java和c++容器对照
    2022-04-01 15:00:00

    javac++
    动态数组ArrayListvector
    Stackstack
    队列Queuequeue
    双向队列LinkedListdeque
    集合(有序,唯一)Treesetset
    集合(无序,唯一)HashSetunordered_set
    映射HashMapunordered_map

     

    更多相关内容
  • c++容器常见操作

    2016-05-29 18:15:51
    总结下常见c++容器操作。
  • c++容器用法

    千次阅读 2021-07-12 11:10:24
    c++中的vector、map和set 标准库类型vector vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,索引用于访问对象。因为vector 容纳着 其他对象,所以它也常被称为容器...

    c++中的容器

    在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对 象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处, 就是“容器类是一种对特定代码重用问题的良好的解决方案”。STL 对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器

    一、顺序性容器:容器中的元素是有顺序的,按位置存储。下表是顺序容器:
    注意:严格来说string并不是容器,但是其具有容器的方法,也可算作容器
    顺序容器

    1. vector vector详解 vector操作详细介绍
      vector是一个模板类,表示对象的集合,对象可以是任何类型的(但必须是同一类的), vector 的底层实现为 array(一段连续的线性内存空间)。它是一种顺序容器,集合中的每个对象都有一个与之对应的索引,索引用于访问对象。因为vector 容纳着其他对象,所以它也常被称为容器container。vector 采用3个迭代器_First_Last_End来指向分配来的线性空间的不同范围。
      要想使用 vector,必须包含适当的头文件。需要做如下的声明
    #include <vector>
    using std::vector;
    

    1.1 vector和数组的区别
    从数据安排的角度来讲,vector和数组极其相似,存放在里面的数据都是相同类型的,而且都是一块连续分配的内存。不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了;而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量。
    1.2 vector的内存扩充机制
    按照容器现在容量的一倍进行增长。vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请一块更大的新内存,并把现有容器中的元素逐个复制过去,然后销毁旧的内存。这时原有的指向旧内存空间的迭代器已经失效,所以当操作容器时,迭代器要及时更新。

    1.3 定义和初始化vector对象
    注意:vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型。

    举例:
    vector<string> v1; //创建空容器,其对象类型为 string 类,空 `vector` 在运行时可以很高效地往 vector 对象中添加元素。最常见的方式就是先定义一个空 vector,然后当运行时获取到元素的值后在逐一添加。
    vector<string> v2(10); // 创建有 10 个具有初始值(即空串)的string类对象的容器。
    vector<string> v2(5, ”hello“); // 创建有 5 个值为 ”hello“ 的string 类对象的容器
    vector<string> v2(v1); // 要保证v2和v1的元素类型相同
    vector<string> v2(v1.begin(), v1.end()); //v2 是 v1 的副本,不一定需要保证v1和v2的元素类型相同
    vector<string> v2(v1.begin(), v1.begin() + 6)  // 拷贝 v1 的一部分作为v2的初始化,不一定需要保证v1和v2的元素类型相同
    

    当将一个容器初始化为另一个容器的拷贝时,两个容器的容器类型和元素类型都必须相同。
    初始化vector的方法
    1.4. vector的操作(下面的函数都是类的成员函数)
    对vector对象来说,直接初始化的方式适用于三种情况:初始值已知且数量较少、初始值是另一个vector对象的副本、所有元素的初始值都一样。更常见的情况是:创建一个vector对象时并不清楚实际所需的元素个数,元素的值也经常无法确定。比如想创建一个vector对象令其包含从0到9共10个元素,使用列表初始化的方法很容易做到这一点:但如果vector对象包含的元素是从0到99或者从0到999的时候,通过列表初始化把所有元素都一一罗列出来就不太合适了。对于此例来说,就可以先创建一个空vector,然后在运行时再利用vector的成员函数 push_back 向其中添加元素,push_back负责把一个值当成vector对象的尾元素"压到"vector对象的”尾端“。其中,v[n] 表示支持下标运算符的。

    举例:
    v1.push_back();  // 向容器末尾添加一个元素
    v1.pop_back();   // 弹出容器中最后一个元素
    void insert();
    iterator erase(iterator it); // 删除指定元素,并返回删除元素后一个元素的位置(如果无元素,返回end())
    void clear(); // 清空容器,相当于调用erase(begin(), end());
    v1.size(); // 获取vector的大小,也就是最后一位数的索引
    v1.capacity(); // 获取当前 vector 的容量,也就是 vector 可以容纳的对象数量
    


    注:任何改变容器大小的操作都可能造成以前的迭代器失效。
    2、deque
    从前面或后面快速的插入与删除,直接访问任何元素。
    3、list
    双链表,从任何地方快速插入和删除。
    4、顺序容器的通用读取操作
    下表列出了可以用来在顺序容器中访问元素的操作。如果容器中没有元素,访问操作的结果是未定义的。
    在这里插入图片描述
    在这里插入图片描述
    5、搜索操作 find()
    搜索操作返回指定字符出现的下标,如果未找到则返回 npos。s.find(args):查找s中args第一次出现的位置。
    在这里插入图片描述
    cbegin()/cend()决定了返回的迭代器类型为const。这时即使vector的类型不是const,也可以防止对该数据的误操作。
    在这里插入图片描述
    二、关联容器:按元素的值来存储,元素可能有序可能无序,比如set里面的元素就是有序的,而且是不重复的。下表是关联容器在这里插入图片描述
    2.1 访问关联容器中的元素
    关联容器提供多种查找一个指定元素的方法,如果关心的只不过是一个特定元素是否已在容器中,可能find()是最佳选择。
    在这里插入图片描述
    对map容器使用find() 代替下标操作(map有find()方法,vector本身没有find方法,其find是依靠algorithm来实现的):
    在这里插入图片描述
    2.1 向关联容器中添加元素:
    关联容器的insert成员,向容器中添加一个元素或一个元素范围。由于map和set(以及对应的无序类型)关键字不可重复出现,因此插入一个已存在的元素对容器没有任何影响。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3.1 set 容器的用法
    set跟vector差不多,它跟vector的唯一区别就是,set里面的元素是有序的且唯一的,只要你往set里添加元素,它就会自动排序(升序),而且,如果你添加的元素set里面本来就存在,那么这次添加操作就不执行。要想用set先加个头文件set。在这里插入图片描述
    三、容器适配器
    容器适配器是让一种已存在的容器类型采用另一种不同的抽象类型的工作方式来实现的一种机制。其实仅是发生了接口转换,可以把它理解为容器的容器,它实质还是一个容器,只是他不依赖于具体的标准容器类型,可以理解是容器的模版。
    STL中包含三种容器适配器:stackqueuepriority_queue
    适配器是容器的接口,它本身不能直接保存元素,它保存元素的机制是调用另一种顺序容器去实现,即可以把适配器看作“它保存一个容器,这个容器再保存所有元素”。STL 中提供的三种适配器可以由某一种顺序容器去实现。默认下stack 和queue 基于 deque 容器实现,priority_queue 则基于vector 容器实现。

    四、迭代器iterator介绍
    我们可以通过使用下标运算符来访问 string 对象的字符或 vector 对象的元素,还有另一种更通用的机制也可以实现同样的目的,这就是迭代器(iterator)。标准库 STL定义的几种容器(vector、set、map、list、forward_list等)都可以使用迭代器,但是只有少数几种才同时支持下标运算。一个特例是string,string对象不属于容器类型(string本质是一个类,但是封装了replace,find,delete,insert等方法),但是string支持很多与容器类型类似的操作,所以string支持迭代器
    迭代器类似于指针类型,迭代器也提供了对对象的间接访问。就迭代器而言,其对象是容器中的元素或者string对象中的字符。使用迭代器可以访问某个元素,也能从一个元素移动到另外一个元素。迭代器有有效和无效之分,这一点和指针差不多,有效的迭代器或者指向某个元素,或者指向容器中尾元素的下一位置,其他所有情况都属于无效。

    1.3.1 使用迭代器
    和指针不一样的是,获取迭代器不是使用取地址符,有迭代器的数据类型同时拥有返回迭代器的成员函数。比如,这些类型都拥有名为begin() 和 end() 的成员函数,其中begin 成员负责返回指向第一个元素(或第一个字符)的迭代器。比如有下述语句:

    //b表示v的第一个元素,e表示v尾元素的下一位置
    auto b = v.begin(), e = v.end(); // b 和 e 的类型相同
    

    end() 成员则负责返回指向容器(或者string对象)”尾元素的下一位置(on past the end)“的迭代器,也就是说,该迭代器指示的是容器的一个本不存在的”尾后(off the end)“元素。这样的迭代器没什么实际含义,仅仅是个标记而已,表示我们已经处理完容器中的所有元素。end 成员返回的迭代器常被称作尾后迭代器或者简称为尾迭代器。特殊情况下如果容器为空,则begin 和 end 返回的是同一个迭代器。
    在这里插入图片描述
    在这里插入图片描述
    1.3.2 使用迭代器初始化容器
    (1)将一个容器初始化为另一个容器的拷贝
    vector<int> v2(v1);
    (2)将一个新容器创建为另一个容器的拷贝的方法有两种:直接拷贝整个容器,或者(array除外)拷贝一个迭代器对指定的元素范围
    vector<int> v2(v1.begin(), v1.end());或者 vector<int> v2(v1.begin(), v1.begin()+5);
    在这里插入图片描述

    Acknowledgment
    leetcode小白随笔记
    容器中的cbegin 和 cend 函数
    顺序容器、关联容器
    常见哈希结构

    展开全文
  • 主要介绍了c++容器list、vector、map、set区别与用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • c++容器使用经验总结

    2016-07-18 12:42:39
    c++容器使用经验总结
  • c++容器详解

    2014-09-09 17:15:49
    详细的介绍了c++中类、对象、容器的使用,并附有图片表示其使用过程。
  • C++容器间拷贝

    千次阅读 2020-11-02 17:17:21
    C++ 将一个容器初始化为另一个容器的拷贝 在我们要初始化一个容器为另一个容器的拷贝时,如果不适用迭代器,直接使用容器变量名进行拷贝只能拷贝相同容器类型的 #include <iostream> #include <vector> ...

    C++ 将一个容器初始化为另一个容器的拷贝

    在我们要初始化一个容器为另一个容器的拷贝时,如果不适用迭代器,直接使用容器变量名进行拷贝只能拷贝相同容器类型的

    #include <iostream>
    #include <vector>
    #include <list>
    using namespace std;
    
    int main()
    {
        list<int> l = {1, 2, 3};
        list<int> v(l);  
        //vector<int> v1(l); //出错
        for(auto i : v)
        {
            cout << i << endl;
        }
        return 0;
    }
    

    如果要拷贝不同容器类型的时候我们要使用迭代器来进行容器内范围拷贝

    #include <iostream>
    #include <vector>
    #include <list>
    using namespace std;
    
    int main()
    {
        list<int> l = {1, 2, 3};
        vector<int> v(l.begin(), l.end());   
        for(auto i : v)
        {
            cout << i << endl;
        }
        return 0;
    }
    
    展开全文
  • c++容器的使用+代码.pdf
  • 本文将详细介绍c++容器简介,c++容器的比较 与操作实例,需要了解更多的朋友可以参考下
  • C++容器详解之deque

    千次阅读 2021-10-30 15:59:14
    1.deque容器概念 2.deque对象的构造 2.1deque对象的默认构造 2.2deque对象的带参数构造 3.deque头部和末尾的添加移除操作 4.deque的数据存取 5.deque与迭代器 6.deque的赋值 7.deque的大小 8.deque的插入 ...

    目录

    1.deque容器概念

    2.deque对象的构造

    2.1deque对象的默认构造

    2.2deque对象的带参数构造

    3.deque头部和末尾的添加移除操作

    4.deque的数据存取

    5.deque与迭代器

    6.deque的赋值

    7.deque的大小

    8.deque的插入

    9.deque的删除


    1.deque容器概念

    deque容器概念

    deque是“double-ended queue”的缩写,和vector一样都是STL的容器,唯一不同的是:

    deque是双端数组,而vector是单端的。

     

     Deque 特点:

    • deque在接口上和vector非常相似,在许多操作的地方可以直接替换。
    • deque可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法)
    • deque头部和尾部添加或移除元素都非常快速, 但是在中部安插元素或移除元素比较费时。

    使用时,包含头文件:#include <deque>  

    2.deque对象的构造

    2.1deque对象的默认构造

    deque也是采用模板类实现。

    deque对象的默认构造形式:deque<T> deqT

    例如:

    deque <int> deqInt;            //存放int的deque容器。

    deque <float> deqFloat;         //存放float的deque容器。

    deque <student> deqStu;        //存放student的deque容器。

    ...

    注意:尖括号内还可以设置指针类型或自定义类型。 

    2.2deque对象的带参数构造

    方式1:deque(beg,end);    //构造函数将[beg, end)区间中的元素拷贝给本身。

    方式2:deque(n,elem);   //构造函数将n个elem拷贝给本身。

    方式3:deque(const deque  &deq);  //拷贝构造函数。

    deque<int> deqIntA;
    
    deqIntA.push_back(1);
    
    deqIntA.push_back(2);
    
    deqIntA.push_back(3);
    
    deqIntA.push_back(4);
    
    
    deque<int> deqIntB(deqIntA.begin(),deqIntA.end()); //1 2 3 4
    
    deque<int> deqIntC(8, 666); //8 8 8 8 8
    
    deque<int> deqIntD(deqIntA); //1 2 3 4

    3.deque头部和末尾的添加移除操作

    1.deque.push_back(element); //容器尾部添加一个数据

    2.deque.push_front(element); //容器头部插入一个数据

    3.deque.pop_back();         //删除容器最后一个数据

    4.deque.pop_front();     //删除容器第一个数据

    deque<int> deqIntA;
    
    deqIntA.push_back(1);
    
    deqIntA.push_back(2);
    
    deqIntA.push_back(3);
    
    deqIntA.push_back(4);
    
    deqIntA.push_back(5);
    
    deqIntA.push_back(6);
    
    deqIntA.pop_front();
    
    deqIntA.pop_front();
    
    deqIntA.push_front(7);
    
    deqIntA.push_front(8);
    
    deqIntA.pop_back();
    
    deqIntA.pop_back();
    
    deqIntA 中剩余元素: 8 7 3 4 

    4.deque的数据存取

    第一  使用下标操作 deqIntA[0] = 100;

    第二  使用at 方法 如: deqIntA.at(2) = 100;

    第三  接口返回的引用 deqIntA.front() 和 deqIntA.back()  

    注意:   第一和第二种方式必须注意越界

    例如:
    
    deque<int> deqIntA;
    
    deqIntA.push_back(1);
    
    deqIntA.push_back(2);
    
    deqIntA.push_back(3);
    
    deqIntA.push_back(4);
    
    deqIntA.push_back(5);
    
    
    int i1 = deqIntA.at(0); //i1 = 1
    
    int i2 = deqIntA[1]; //i2 = 2
    
    deqIntA.at(0) = 666; //第一个元素改成666
    
    deqIntA[1] = 888; //第二个元素改成888
    
    
    int iFront = deqInt.front(); //666
    
    int iBack = deqInt.back(); //5
    
    deqInt.front() = 888; //第一个元素改成  888
    
    deqInt.back() = 666; //最后一个元素改成 666

    5.deque与迭代器

    1.deque.begin();  //返回容器中第一个元素的迭代器。

    2.deque.end();   //返回容器中最后一个元素之后的迭代器。

    3.deque.rbegin();  //返回容器中倒数第一个元素的迭代器。

    4.deque.rend();   //返回容器中倒数最后一个元素之后的迭代器。

    5.deque.cbegin();  //返回容器中第一个元素的常量迭代器。

    6.deque.cend();   //返回容器中最后一个元素之后的常量迭代器。

    deque<int> deqIntA;
    
    deqIntA.push_back(1);
    
    deqIntA.push_back(2);
    
    deqIntA.push_back(3);
    
    deqIntA.push_back(4);
    
    deqIntA.push_back(5);
    
    
    //普通迭代器
    
    for(deque<int>::iterator it = deqIntA.begin(); it!=deqIntA.end(); ++it){
    
    (*it)++;  //*it++  (*it)++
    
    cout<<*it;
    
    cout<<" ";
    
    }
    
    
    //常量迭代器
    
    deque<int>::const_iterator cit = deqIntA.cbegin();
    
    for( ; cit!=deqIntA.cend(); cit++){
    
    cout<<*cit;
    
    cout<<" ";
    
    }
    
    
    //逆转的迭代器
    
    for(deque<int>::reverse_iterator rit=deqIntA.rbegin(); rit!=deqIntA.rend(); ++rit){
    
    cout<<*rit;
    
    cout<<" ";
    
    }

    6.deque的赋值

    1.deque.assign(beg,end);    //将[beg, end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。

    2.deque.assign(n,elem);  //将n个elem拷贝赋值给本身。

    3.deque& operator=(const deque &deq); //重载等号操作符

    4.deque.swap(deq);  // 将deque与本身的元素互换

    例如:
    
    deque<int> deqIntA,deqIntB,deqIntC,deqIntD;
    
    deque<int> deqIntA;
    
    deqIntA.push_back(1);
    
    deqIntA.push_back(2);
    
    deqIntA.push_back(3);
    
    deqIntA.push_back(4);
    
    deqIntA.push_back(5);
    
    
    
    deqIntB.assign(deqIntA.begin(),deqIntA.end()); // 1 2 3 4 5
    
    
    deqIntC.assign(4,888); //888 888 888 888 
    
    
    deqIntD = deqIntA; //1 2 3 4 5
    
    
    deqIntC.swap(deqIntD); //互换

    7.deque的大小

    1.deque.size();     //返回容器中元素的个数

    2.deque.empty();     //判断容器是否为空

    3.deque.resize(num);    //重新指定容器的长度为num,若容器变长,则以默认值0填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

    4.deque.resize(num, elem);  //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

    deque<int> deqIntA;
    
    deqIntA.push_back(1);
    
    deqIntA.push_back(2);
    
    deqIntA.push_back(3);
    
    deqIntA.push_back(4);
    
    deqIntA.push_back(5);
    
    
    
    int iSize = deqIntA.size();  //5
    
    
    deqIntA.resize(7); //1 2 3 4 5 0 0
    
    deqIntA.resize(8,1); //1 2 3 4 5 0 0 1
    
    deqIntA.resize(2); //1 2

    8.deque的插入

    1.deque.insert(pos,elem);   //在pos位置插入一个elem元素的拷贝,返回新数据 的位置。

    2.deque.insert(pos,n,elem);   //在pos位置插入n个elem数据,无返回值。

    3.deque.insert(pos,beg,end);   //在pos位置插入[beg,end)区间的数据,无返回值

    9.deque的删除

    1.deque.clear();      //移除容器的所有数据

    2.deque.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。

    3.deque.erase(pos);    //删除pos位置的数据,返回下一个数据的位置。

    展开全文
  • 浅谈C++容器

    2012-10-14 01:58:07
    浅谈C++容器
  • 主要为大家详细介绍了C++容器vector实现通讯录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 使用std::variant,每次只能存放一个值,但是可以代表很多不同的数据类型 std::variant<int,double> 然后可以把这些放在一个vector里面: std::vector<...如果类型完全不确定,可以用any,any可以存储任何...
  • C++ 容器的引用,函数调用

    千次阅读 2020-09-30 16:35:45
    C++ vector<int>temp; 对容器内元素的引用: vector<int>::referencer_temp =temp.at(0);; 对整个容器引用: vector<int>&temp2=temp;
  • C++容器详解

    万次阅读 多人点赞 2018-09-11 15:03:50
    首先,我们必须理解一下什么是容器,在C++容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对 象,当然这是一个...
  • C++容器-list、set、map

    千次阅读 2022-03-26 13:25:57
    一、list容器 1、list基本概念 list(链表)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。 链表由结点构成,结点之间是独立的,由数据域和指针域构成。 优点:链表可以...
  • C++容器和迭代器

    万次阅读 多人点赞 2018-06-08 09:07:50
    C++中,容器被定义为:在数据存储上,有一种对象类型,它可以持有其他对象或指向其他对象的指针,这种对象类型就叫做容器。简单理解,即容器就是保存其他对象的对象。而且,这种“对象”还有处理“其他对象”的...
  • C++容器与队列

    2015-04-11 22:55:33
    关于C++容器和队列的总结,能够帮助初学者对C++中的容器和队列有更直观的理解。
  • 持续构建:c++容器化编译环境

    千次阅读 2019-09-16 14:48:30
    在当前的主流的持续集成与持续交付中,Java项目仍然是大多数实践中主要的构建语言,这篇文章以gcc的容器化构建环境为例,通过gcc下的HelloWorld示例项目来介绍一下如何使用容器方式进行c++语言项目的构建。
  • c++容器定义、初始化、赋值

    千次阅读 2020-07-08 11:28:43
    令C表示六个顺序容器类型期中之一(vector,deque,list,forward,string,array),以下详细说明定义和初始化以及赋值. 1.容器定义和初始化 (1)C c;默认构造函数,如果c是一个array,则c中元素按照默认初始化;否则c...
  • C++容器效率

    2019-04-04 10:25:04
    vetor deque list
  • C++ 容器内的内存释放

    2019-09-16 00:19:01
    测试容器内的内存释放 struct S1 { int a; }; list ls1; void fn() { for (int i = 0; i < 100000; i++) { S1 s1 = { i }; l...
  • c++容器类&QT;容器

    2012-10-23 17:00:22
    C++中的容器类包括“顺序存储结构”和“关联存储结构”,前者包括vector,list,deque等;后者包括set,map,multiset,multimap等。 常用函数介绍等. 若需要存储的元素数在编译器间就可以确定,可以使用数组来...
  • 浅谈C++容器原理

    2016-03-31 18:43:08
    本文档简要概述了C++集中容器的内部实现机制,让程序员更好的使用容器
  • c++容器笔记

    2016-11-27 21:17:05
    自己总结的c++容器相关的知识笔记 有例子 虽然没有发博文 应为实在太长 但是很实用 全部以实例来讲解的
  • 参考 STL容器去重,Vector、list等 C++ STL容器的使用方法(vector、queue、list、set、map) C++ 序列式容器总结
  • C++容器适配器的理解与使用

    千次阅读 多人点赞 2017-08-18 19:41:50
    1.对容器适配器的理解C++提供了三种容器适配器(container adapter):stack,queue和priority_queue。stack和queue基于deque实现,priority_queue基于vector实现。举个简单的例子,我们手机充电的时候需要电源...
  • 预测分析算法的设计与实现(左递归消除和LL1文法)(是基于字符数组实现,没使用C++容器

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 224,661
精华内容 89,864
关键字:

c++容器

c++ 订阅
友情链接: FaceDetection.zip