搜索
简帛阁>技术文章>C++知识点补缺

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

最近用C++写设计模式,遇到了很多问题,在此总结。1C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用首先要明白类的定义与声明的区别类的声明:classA;类的定义:cla
、define宏定义如下程序段,则输出结果为:defineMAX12intmain(){cout<<20\0MAX019<<endl;}输出结果:20,知识点:define定
初学者在刚开始读C++Primer的时候,总是容易被书中各种初始化搞得头大:默认初始化、列表初始化、值初始化、类内初始值、构造函数初始值列表、newint和newint()的区别本文把书中这些概念集
录一、编程的步骤二、八进制、十六进制如何显示这些进制?与二进制的转化八进制与二进制相互转换三、数据类型的选择对应怎样的%四、字符型变量转义序列我是一名刚上大学的学生,在这个学期学习了《c语言程序设计
参考:一,https://wwwcnblogscom/qunqun/p/8653806htmlintlonglongunsignedlonglong数据范围https://blogcsdnnet/ly
C++容器&算法API(分类的很好)https://githubcom/huihut/interview/tree/master/STLC++语法相关https://githubcom/huihu
截止到目前我已经写了600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载下载链接:https://panbaiducom/s/1hjwK0Z
第一章C/C++程序基础一、一般赋值语句:考察一般赋值语句的概念和方法。1程序:1include<stdioh>23intmain(void)4{5intx3,y,z;67x*(yz4)
述1、1980年贝尔实验室BjanreStroustrup(比雅尼·斯特劳斯特鲁普)对C改进与扩充最初称为“带类的C”,(cwithclasses)1983年正式命名为C++2、C++是C的改进与扩
1、TinyCC发挥C语言的威力之一https://wwwibmcom/developerworks/cn/linux/ltinyc/part1/indexhtml在下文中,我们说TinyC编译器、