C++极速掌握,只需这一篇就够了

开始

  1. C++程序中必须包含一个main函数

  2. cerr:标准错误

  3. 某个变量在不同cpp文件中都有,为了避免混乱,但使用时一般需要声明该变量extern

  4. 类型别名typedeftypedef int wa //wa是int的同义词

  5. 一般是.h文件的固定开头.以下为例,在别处引用时,#include SALE_DATA_H.h

    #ifndef SALE_DATA_H
    #define SALE_DATA_H
    
    #endif
    
  6. 空指针:nullptr int* ptr = nullptr; //此时ptr是空指针

  7. string表示可变长的字符序列,vector存放的是给定类型的可变长的序列

  8. 关于string:" "(双引号)

    1. #include <string>
      using namespace std;
      
    2. 定义和初始化

      string s1;
      string s2(s1);
      string s3("value");
      string s3 = "value";
      string s4(n, 'c');   //这里注意是单引号
      
    3. 操作

      #include <string>
      using namespace std;
      string s;
      s.push_back('c');   //单引号,也就是只能在后面添加单个字符
      s.empty();    //判空
      s.size();  //字符个数
      s[n]; //第n个字符的调用
      s1+s2;  //字符的拼接
      <,>,<=,>=   //比较     判断字符代表的数字的大小,可以判断字符是否相等
      
  9. 关于vector

    1. 定义和初始化

      vector<T> v1;
      vector<T> v2(v1);
      vector<T> v2 = v1;
      vector<T> v3(n, val);   //n个val值组成
      vector<T> v4(n);    //n个0值组成
      vector<T> v5{a,b,c.....}
      vector<T> v5 = {a,b,c,....}
      
    2. 操作

      v.empty();
      v.size();
      v.push_back(t);
      v[n];
      
  10. 关于迭代器iterator

    1. 迭代器运算符

      *iter   //返回引用
      iter-> men   //等价于(*iter).men
      ++iter;
      --iter;
      iter1 == iter2;
      iter += n;
      iter1 - iter2; // 两个迭代器之间的距离
      
  11. 多维数组

    int *ip[4] //含有4个整型指针的数组
    int (*ip)[4] //含有4个整型的数组
    
  12. 条件运算符

    condition ? ture experssion:false experssion
    
  13. 位运算符

    ~  //位取反   1置0,0置1   ~expr
    &  //位与   对应位置都是1,则为1,否则为0
    ^  //位异或  对应位置有且只有一个为1时,则为1,否则为0   a^a^b=b    刷题中的只有一个元素
    |   //位或   对应位置至少有1位1,则为1,否则为0
    
  14. 指针

    1. 指针是一个值为内存地址的变量(或数据对象)

    2. 类似于身份证号,每个身份证号代表地址,指向某个人

    3. 在计算机中本来是地址-值,但是人类无法记住地址,就将地址转换为变量名

      int year = 2018;
      int *ptr = &year;   //将year的地址赋值给ptr指针
      
    4. 声明中的*和使用中的 *完全不同!!!!

      1. 声明中的*,代表当前变量是地址
      2. 使用中的*,代表指向地址对应的值
      int num = 1024;
      int* ptr_num = &num;
      *ptr_num = 1111;     //使用时的*代表间接运算符,指向ptr_num指向的1024,并将其修改为1111
      cout << num << endl;    // num = 1111;
      
    5. 取地址符&

    6. char *的操作!!!!!!!

      char ch = 'a';
      char* ptr_ch = &ch;
      cout << ptr_ch <<endl;    //此时输出的ptr_ch是乱码,因为char *在c++中默认是字符串
      cout <<(void *)ptr_ch << endl; // 此时输出的ptr_ch是地址,因为通过了void *强制转换
      
    7. 指针类型

      1. 空指针:int* ptr = nullptr; int* ptr=NULL

        1. 指针很危险,如果只声明不定义的话,指针不一定会知道什么地方,所以要定义为空指针。
      2. void*指针:一中特殊的指针类型,可以存放任意类型对象的地址

        1. 注意void*指针不可以直接修改对象的值,也就是

          double pi = 3.14;
          void* ptr_pi = &pi;
          *ptr_pi = 1122.1;   //错误,void*指针无法直接修改对象的值
          
        2. void*指针的用途

          1. 与别的指针进行比较
          2. 作为函数的输入和输出
          3. 赋值给另一个void*指针
  15. 引用:给对象起了一个别名 int&

    1. 例如:int& refValue = int_value; ,如果int& refValue,错误,引用必须初始化

    2. 引用只能跟对象绑定,int& = 10(错误) int& = root(正确)

      1. 如果非要引用常量,const int& = 10;(正确)
    3. 实际原理还是指针,在使用时与*ptr相同

  16. 指针与数组(存储在一块连续的内存空间)

    1. 指针任何时候都占4个字节空间

    2. 数组名等于数组的首地址

    3. 数组的类型:double[]

    4. 第i+1个元素可表示为

      1. 地址:&num[i+1]num+i
      2. 值:num[i+1]*(num+i)
    5. 数组名不能++,但是指向数组名的指针可以++

      int num[] {1,2,3,4};
      int* ptr_num = num;
      cout << *++ptr_num << endl;   // 输出为2
      
      cout << *++num << endl;   //输出错误,数组名不能++
      
    6. num的值与&num[0]的值相同,其实地址相同

  17. 指针的运算

    1. 指针的平移(++、–)
    2. 指针的算术运算(+2,-3)
      1. 指针可以减(加)去任意数,但是很危险,不知道指到哪里了
      2. 尤其是一些for循环的时候,很危险,不知道减到哪
  18. 动态分配内存

    1. 使用new分配内存:当运行阶段时才分配内存

      int num1;   //在编译阶段就要分配内存
      int* ptr_int = new int;  //在运行阶段分配内存
      //上面这句话的意思是在运行阶段分配一个未命名的大小为int值的内存,并使用ptr_int指向该内存
      //该空间只能由指针访问
      delete ptr_int;  //释放由new分配的内存,与new成对出现
      
    2. delete释放

      1. 与new成对出现
      2. 不要释放已经释放的内存
      3. 不要释放普通内存
      4. 释放变量:delete num;释放数组:delete [] nums (int * nums 
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值