zoukankan      html  css  js  c++  java
  • C++知识点补缺

    最近用C++写设计模式,遇到了很多问题,在此总结。

    1.C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用

      首先要明白类的定义与声明的区别

      类的声明:

    class A;

      类的定义:

    class A
    {
        string a;          
    }

      当用实例化一个类的对象时,编译器会根据类的定义来分配相应的存储空间。也就是说,在创建对象前,一定要有完整的类定义,这样编译器才能正确的计算所需空间。

      当遇到如下情况时

    class A
    {
        A a;
    }    

      上述代码中,由于Screen还没有定义结束,在内部定义一个Screen类型的对象时,编译器无法知道应该为sc分配多少空间,因此会报注释中的错误。

      在类定义时,已指向自身类型的指针或引用作为数据成员则没有问题。按照前面的介绍就很好理解了,由于指针和引用所占存储空间大小与类型无关,所以编译器可以计算分配空间,所以正确。

    2.C++标准模板库stack,queue

      基本的函数

      stack:  

        (1) push()
          push(x)将x入栈,时间复杂度为0(1),
        (2) top()
          top()获得栈顶元素,时间复杂度为0(1).
        (3) pop()
          pop()用以弹出栈顶元素,时间复杂度为0(1)。
        (4)empty()
          empty()可以检测stack 内是否为空,返回true为空,返回false 为非空,时间复杂度为0(1)。
        (5)size()
          size()返回stack内元素的个数,时间复杂度为0(1)。

      queue:   

        (1)push(x)

          将x进行入队,时间复杂度为0(1)
        (2)front()和back()

          可以分别获得队首元素和队尾元素,时间复杂度为0(1)
        (3)pop()

          令队首元素出队,时间复杂度为0(1)。
        (4)empty()

          检测queue是否为空,返回true则空,返回false则非空。时间复杂度为0(1)。
        (5)size()

          返回queue内元素的个数,时间复杂度为0(1)。

    3.list的使用

        (1)list中的构造函数:

          list() 声明一个空列表;

          list(n) 声明一个有n个元素的列表,每个元素都是由其默认构造函数T()构造出来的

          list(n,val) 声明一个由n个元素的列表,每个元素都是由其复制构造函数T(val)得来的

          list(n,val) 声明一个和上面一样的列表

          list(first,last) 声明一个列表,其元素的初始值来源于由区间所指定的序列中的元素

        (2)begin()和end():通过调用list容器的成员函数begin()得到一个指向容器起始位置的iterator,可以调用list容器的 end() 函数来得到list末端下一位置,相当于:int a[n]中的第n+1个                   位置a[n],实际上是不存在的,不能访问,经常作为循环结束判断结束条件使用。

        (3)push_back() 和push_front():使用list的成员函数push_back和push_front插入一个元素到list中。其中push_back()从list的末端插入,而 push_front()实现的从list的头部插入。

        (4)empty():利用empty() 判断list是否为空。clear(): 清空list中的所有元素。

        (5)list遍历:

    #include<list>
    //define list
    list<int> order1;
    
    list<int>::iterator iter1;
                
    for (iter1 = order1.begin(); iter1 != order1.end(); iter1++)
    {
        cout << "order1 = "<<*iter1 << endl;            
    }

    4.map的使用

        (1)map的定义: map<string,int> mp;

        (2)map容器元素的访问:map的两种访问方式:下标访问、迭代器访问

        (3)map常用函数      

          find()

          find(key):返回键为key的映射,时间复杂度为O(logN)

          erase()

          删除单个元素:

          mp.erase(it):it为需要删除的元素的迭代器。时间复杂度为O(1)

          mp.erase(key):key为删除元素的键,时间复杂度为O(logN)

          删除区间内的元素,左闭右开[start,end)

          size()
          clear()

          用来清空map,复杂度为O(N)

    参考博客:

    https://blog.csdn.net/playboy_lei/article/details/52040050

    https://www.cnblogs.com/drq1/p/9699482.html

    https://blog.csdn.net/yas12345678/article/details/52601578/

    https://blog.csdn.net/weixin_43464653/article/details/115284100?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-2-115284100.pc_agg_new_rank&utm_term=c%2B%2Blist+%E9%81%8D%E5%8E%86%E6%89%80%E6%9C%89%E5%85%83%E7%B4%A0&spm=1000.2123.3001.4430

    https://www.cnblogs.com/drq1/p/9699482.html

  • 相关阅读:
    UML——六大关系整理
    C#编写Windows 服务
    Centos7下lamp环境搭建的小笔记
    awk命令分析日志的简单笔记
    ssrf小记
    关于cookie的一些学习笔记
    xssbypass小记
    xss挑战赛小记 0x03(xssgame)
    xss挑战赛小记 0x01(xsstest)
    ubuntu下安装LAMP环境遇到的一些小问题
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15584616.html
Copyright © 2011-2022 走看看