从C快速过渡到C++(便于写算法)

一、前言

  • ​ 因为自己平时是做JavaWeb方向的,在写一些算法的时候,Java运行的速度远低于C++,并且Java代码过于复杂,代码量也高。在一些算法网站上也是普遍采用C++,所以这里学习C++来便于算法的学习(需要有c语言的基础).

  • C++中包含了C语言标准库的移植版本,C标准库的头文件xxx.h基本上编程了xc。例如:stdio.h—>cstdio、math—>cmath、string—>cstring 。

二、C++标准输入输出

2.1 输出

  • 包含头文件#include

  • cout是一个标准输出流对象(变量),代表控制台窗口。

  • << 是一个输出流运算符,假如o是一个输出流对象。x是一个数据o<<x

  • cout是标准名字空间std的一个名字。必须加上名字空间限定std. std::cout。

    • 也可以**用using namespace std;**直接引入整个名字空间来代替
  • 代码演示

    • #include<iostream>
      using namespace std;
      int main()
      {
          cout << "nihao";
          
          return 0;
      }
      

2.2输入

  • 格式 cin >> xxx。(PS:这里endl表示换行符

  • ​ 代码演示

    • #include<iostream>
      using namespace std;
      int main()
      {
          int a , b ,c ,d ;
          cin >> a >> b >> c >> d ;//表示输入多个数据
          cout << a << endl;
          return 0;
      }
      

三、引用变量(&运算符)

  • 引用变量是其它变量的别名。如同一个人的外号或小名。

  • 既然是引用,定义引用变量时就必须要指明其引用的是哪个变量,类型也必须要匹配。

    • int a = 3;
    • int &r = a;
  • 修改引用变量的值,其原先的值也会发生改变,可以用来写交换函数。

    • eg:

      #include<iostream>
      using namespace std;
      int main()
      {
          int a =3,&r = a;
          cout << a << '\t' << r << endl;
          r = 5;
          cout << a << '\t' << r << endl;
          return 0;
      }
      

    在这里插入图片描述

四、函数的默认形参和重载

4.1形参

  • 函数的形参可以有默认值
    • void print(char ch ,int n=1);
  • 默认形参必须在非默认形参右边,即一律靠右
    • add(x=1,y,y,z=3); //
    • add(y,x=1,z=3);//正确

4.2重载(和Java相同)

  • C++允许作用域中有同样的函数,只要它们的形参不同即可。
    • int add(int x,int y);
    • double add(double x ,double y);

五、函数模板(类似于Java的泛型)

  • C++允许使用函数模板,用template关键字增加一个模板头,将数据类型编程类型模板参数

  • #include<iostream>
    using namespace std;
    template<typename T>
    T add(T x , T y){
        return x + y;
    }
    
    int main()
    {
        cout << add(1,1);
    }
    

六、用户定义类型string和Vector

6.1 string

  • ​ string是一个用户自定义类型,表示的是字符串
    • string s = “hello”;
  • 可以用成员访问运算符.方法string类的成员方法(有很多的字符串处理方法)
    • cout << s.size() << endl
    • string s1 = s.substr(1,3);

6.2Vector

  • 先看一下C++的内在的静态数组

    • int arr[] = {1,2,3};//大小固定,以后不能改变。
  • 介绍一下Vector

  • 是一个向量,类似于数组,但是可以实现动态增长。需要添加头文件

  • 也是一个类模板,实例化产生一个类,如vector,产生一个数据元素是int的vector类(向量)。

  • 可以通过vector类对象去访问其中的成员

  • 同样可以用运算符进行一些运算。

  • #include<iostream>
    #include<vector>
    using namespace std;
    
    int main()
    {
        vector<int> v;
        v.push_back(3);
        for(int i = 0 ; i < v.size() ; i++){
            cout << v[i] << endl;
        }
        //重新定义大小
        v.resize(2);
    }
    

七、指针和动态内存分配

7.1指针

  • 约定:指针就是地址,变量的指针就是变量的地址,可以用取地址运算符&获取一个变量的地址。如 :&var
  • 指针变量就是储存指针**(地址)**的变量
    • 如:T *p ;//p就是储存“T类型变量的地址”的变量。
  • 通过取内容运算符*得到指针所指向的变量的内容。
    • 如:*p就是得到p指向的变量。

7.2 内存分配

  • ​ c语言中是采用malloc函数的,在C++中我们采用new关键字。

  • #include<iostream>
    using namespace std;
    int main()
    {
            //(分配类型 *)malloc(分配元素个数 *sizeof(分配类型))
    // 如果成功,则返回该空间首地址,该空间没有初始化,如果失败,则返回0
        // int *p = (int *)malloc(sizeof(int));
        int *p = new int;
        *p = 3;
        cout << p;//0x856b20
        cout << *p;//3
        delete p;//释放这个空间
        return 0;
    }
    
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值