• C++数据结构


    向量vector

      vector是线性顺序结构,在内存中顺序连续存储,相当于数组。但是它是动态的,其大小和数据存储类型需要指定,而且大小可以自动或手动扩展。

    几个必须先了解的方法和概念:

      capacity() —— 得到容器的容量,在用push_back()方法添加数据时,它会根据需要自动扩充,也可以由reserve()方法手动扩充;,但是每次自动扩容,它都会重新申请一块更大的动态内存,并复制原数据到新的内存区,因此,最好由需要手动设置;

      size() —— 得到容器实际含有的元素个数,添加元素时,若元素个数将要超出容量值,容器的容量会自动扩充;

      begin(),end()分别返回指向数组首端和末端的迭代器,在这里就是指针。

    #include <vector>
    #include <stdio.h>
    using namespace std;
    void
    testVector() { vector<int> ver01;
    //-------------- reserve()方法手动设置容器的容量 ---------- ver01.reserve(
    8); /*-------------- 在末尾添加数据,类似于栈的入栈操作 -----------------------
    *--------------- 如果vector的容量不够,则自动扩充,一般按1.5或2倍扩充: 4, 8, 16 ... ------
    */
    ver01.push_back(
    30); ver01.push_back(60); ver01.push_back(10);
    ver01.push_back(70);
    //-------------- 在指定的位置插入数据,其后的数据自动依次往后挪 -------- ver01.insert(ver01.begin()
    +1, 40); ///------------- 删除末尾的一个数据(70),也可以用 erase() 删除若干连续的元素 --------------- ver01.pop_back(); //*/ printf("length: %d size: %d ", ver01.capacity(), ver01.size()); for(int i = 0; i < ver01.size(); i++) { cout<<ver01[i]<<endl; } }

    函数testVector()的调用结果:

     

    集合Set

      set集合是无重、实现了红黑树的平衡二叉检索树的数据结构,每次插入数据时,它会调整二叉树数据排列,以保证每个树节点键值大于左子树结点键值,小于右子树结点键值,而且根结点的左子树和右子树高度一致。

      一般构造set数据结构是为了检索,它使用中序遍历法,检索的效率高于vector、list、queue等;

    #include <set>
    #include <iostream>
    void testSet()
    {
        set<int> set01;
    
        set01.insert(43);
        set01.insert(25);
        set01.insert(17);
        set01.insert(66);
        set01.insert(82);
        set01.insert(51);
    
        set<int>::iterator it;
        for(it = set01.begin(); it!=set01.end(); it++)
        {
            cout<<*it<<endl;
        }
    }

     函数testSet()的调用结果是:

     

      insert()--在集合中插入元素

      begin()--返回指向第一个元素的迭代器

      end()--返回指向最后一个元素的迭代器

      clear()--清除所有元素

      erase()--删除集合中的元素

      count()--返回某个值元素的个数

      empty()--如果集合为空,返回true

      find()--返回一个指向被查找到元素的迭代器

      equal_range()--返回集合中与给定值相等的上下限的两个迭代器

      size()--集合中元素的数目

      max_size()--返回集合能容纳的元素的最大限值

      swap()--交换两个集合变量

      get_allocator()--返回集合的分配器

      lower_bound()--返回指向小于(或等于)某值的第一个元素的迭代器

      upper_bound()--返回大于某个值元素的迭代器

      rbegin()--返回指向集合中最后一个元素的反向迭代器

      rend()--返回指向集合中第一个元素的反向迭代器

      key_comp()--返回一个用于元素间值比较的函数

      value_comp()--返回一个用于比较元素间的值的函数

     

    映射 map

       映射即具有键——值对应关系的数据结构,定义形式:map<key,value>;

    #include <map>
    #include <iostream>
    using namespace std;
    void testMap()
    {
        map<int,char*> map01;
        map<int,char*>::iterator it;
    //---------------------- 在 map 中,数 据 按 key 的 值 升 序 排 列 -------------
    //---------------------- 下 面 是 map 的 三 种 插 入 键 值 对 的 方式 ----------
    map01[
    12] = "abcdef"; map01.insert(pair<int,char*>(8,"defghi")); map01.insert(map<int,char*>::value_type(17,"fghijkl")); //----------------------- 遍 历 map 所 有 的 键 值 对 ------- for(it = map01.begin(); it != map01.end(); it++) cout<<it->first<<" "<<it->second<<endl;
    //---------- find() 方 法:通 过 键 key 查 找 value,返 回 值 是 一 个 迭 代 器 iterator ------ it
    = map01.find(12); if(it != map01.end()) { cout<<"found!"<<endl; //---------------- erase() 方 法 删 除 一 对 键 值 ---------- map01.erase(it); it = map01.find(12); if(map01.end() == map01.find(12)) cout<<"Not found!"<<endl; } }

     函数testMap()的调用结果:

  • 相关阅读:
    软件配置管理的作用?软件配置包括什么?
    火火恍恍惚惚
    什么是软件测试?软件测试的目的与原则
    软件生存周期及其模型是什么?
    试述软件的概念和特点?软件复用的含义?构件包括哪些?
    一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
    numpy的broadcast是怎么做的
    python到底是解释型语言还是需要编译的?
    python:删除类实例,仅仅只有动态属性会被删除,类属性不会被删除
    jupyter的kernel莫名其妙找不到,莫名其妙就中断
  • 原文地址:https://www.cnblogs.com/mwwf-blogs/p/5431836.html
Copyright © 2020-2023  润新知