• 慕课网:C++ & 数据结构


    课程链接:james_yuan的课程

    这部分太枯燥了,如果教材难度稍大,根本就学不下去,所以就先看看通俗的视频吧。

    课程目录


    1.C++远征之起航篇 - C++亮点尽在其中

    2.C++远征之离港篇 - C++扫清通往面向对象的最后一道障碍

    3.C++远征之封装篇(上) - 封装--面向对象的基石。

    4.C++远征之封装篇(下)- 封装--面向对象三大特征之一

    5.C++远征之继承篇 - 继承,面向对象三大特征之一

    6.C++远征之多态篇 - 多态,C++的精华所在。

    7.C++远征之模板篇 - 模板,站在巨人的肩膀上。

     

    1.数据结构探险—队列篇 - 与现实最为贴近的数据结构-队列。

    2.数据结构探险—栈篇 - 栈,先入后出(FILO)

    3.数据结构探险之线性表篇 - 线性表的主体顺序表和链表

    4.数据结构探险之树篇 - 树,将为你开启更精彩的数据结构大门

     

    C++远征之起航篇


    第1章 C++简介

        1-1 C++简介 (03:05)

    贝尔实验室;C++之父;计算机语言排行:Java、C、object-C、C++、C#、PHP、Basic、Python

        1-2 练习

    第2章 C++ IDE环境搭建

        2-1 C++ IDE环境搭建 (07:19)

    IDE(编辑器、编译器、调试器、图形用户工具);visual studio 2013和visual assist X for visual studio

    IDE使用:新建项目;新建文件;设置字体、字号;

    新建项目--win32--win32控制台程序--空项目--右键源文件--新建C++文件

    工具--选项--字体和颜色--16号--黑体

    第3章 C++之初体验

        3-1 C++之初体验

    第4章 C++语言新特性

        4-1 C++的新特性 (05:47)

    新的数据类型;新的初始化方法;随用随定义

    C语言中的数据类型:基本类型(int、char、float、double);构造类型(数组、struct、union、enum);指针;空类型void;

    C++新增的bool(true、false)

    C语言只有一种初始化方法(int x = 1024);C++中增加了直接初始化(int x(1024));

    C语言必须在函数体开头定义所有变量

        4-2 练习
        4-3 C++的输入输出方式 (05:09)

    C语言的输入输出:输入(输入设备--输入流--scanf--变量);输出(变量--printf--输出流--输出设备)

    C++:用cin和cout代替相应的函数;好处:不关注占位符;不关注数据类型;不易出错;

        4-4 练习
        4-5 C++新特性以及输入输出演示 (06:54)

    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    //提示用户输入整数;然后分别以8、10、16进制输出
    //提示输入一个布尔值,以布尔形式输出
    int main()
    {
        
        int x(0);
        cout << "请输入一个整数:" << endl;
        cin >> x;
        cout << oct << x << endl << dec << x << endl << hex << x << endl;
        
        cout << "请输入一个布尔值:" << endl;
        bool y = false;
        cin >> y;
        cout << boolalpha << y << endl;
        return 0;
    }


        4-6 C++之namespace (05:02)

    命名空间就是为程序划片取名字;解决了命名冲突的问题;同时使用不同团队开发的程序

    namespace定义命名空间;本程序内的所有变量和函数都在这个命名空间之内;

    我错了,在一个文件内部也可以有多个命名空间,使用namespace就可以定义;类似于代码块的标记;

    namespace A
    {
        int x = 0;
        void f1();
        void f2();
    }
    cout << A::x << endl;


        4-7 练习
        4-8 namespace演示 (10:09)

    #include<stdlib.h>
    #include<iostream>
    using namespace std;
    
    namespace A
    {
        int x = 1;
        void func()
        {
            cout << "A" << endl;
        }
    }
    
    namespace B
    {
        int x = 2;
        void func()
        {
            cout << "B" << endl;
        }
        void func2()
        {
            cout << "BB" << endl;
        }
    }
    
    using namespace B;
    int main()
    {
        cout << A::x << endl;
        B::func();
        func2();
        system("pause");
        return 0;
    }

        4-9 章节练习

    第5章 综合练习

        5-1 综合练习 (12:09)

    //知识点:bool 命名空间 输入输出
    //使用一个函数找出整型数组中的最大值和最小值
    #include<stdlib.h>
    #include<iostream>
    using namespace std;
    
    namespace CompA
    {
        int getMaxOrMin(int *arr, int count, bool isMax)
        {
            int temp = arr[0];
            for (int i = 1; i < count; i++)
            {
                if (isMax)
                {
                    if (temp < arr[i])
                    {
                        temp = arr[i];
                    }
                }
                else
                {
                    if (temp > arr[i])
                    {
                        temp = arr[i];
                    }
                }
            }
            return temp;
        }
    }
    
    int main(void)
    {
        int arr1[4] = { 3, 5, 1, 7 };
        bool isMax = true;
        cout << CompA::getMaxOrMin(arr1, 4, isMax) << endl;
        system("pause");
        return 0;
    }

     

    C++远征之离港篇

    第1章 离港总动员

        1-1 离港总动员 (02:11)

    面向对象:抽象、封装、继承、多态;

    指针 VS 引用;#define VS const;函数默认值 & 函数重载;

    内存管理;堆;出来混迟早是要还的;

    第2章 C++语言引用

        2-1 引用 (08:12)

    外号、别名;不能只有别名;基本数据类型的引用;引用在定义时,创建并初始化(必须在创建时初始化);

    int &b = a;

    结构体类型的引用;

    typedef struct
    {
        int x;
        int y;
    }Coor;
    
    int main()
    {
        Coor c1;
        Coor &c = c1;
    }

    指针类型的引用(难点): 格式:类型 *& 指针引用名 = 指针;

    int a = 10;
    int *p = &a;
    int *&q = p;

    引用作函数参数:

    //使用指针交换两个数
    void fun(int *a, int *b)
    {
        int tmp = *a; *a = *b; *b = c;
    }
    int x = 10, y = 20;
    fun(&x, &y);
    //使用引用交换两个数
    void fun(int &a, int &b)
    {
        int tmp = a; a = b; b = tmp;
    }
    int x = 10, y = 20;
    fun(x, y);

        2-2 引用代码演示 (06:59)

    #include<iostream>
    using namespace std;
    int main()
    {
        int a = 0;
        int &b = a;
        b = 10;
        cout << a << endl;
        a = 20;
        cout << b << endl;
        return 0;
    }
    #include<iostream>
    using namespace std;
    
    typedef struct
    {
        int x;
        int y;
    }Xin;
    
    int main()
    {
        Xin xin;
        Xin &a = xin;
        a.x = 10;
        a.y = 20;
        cout << xin.x << " " << xin.y << endl;
        return 0;
    }
    #include<iostream>
    using namespace std;
    int main()
    {
        int a = 0;
        int *p = &a;
        int *&q = p;
        *q = 10;
        cout << a << endl;
        return 0;
    }
    #include<iostream>
    using namespace std;
    void func(int &a, int &b);
    
    int main()
    {
        int x(10), y(20);
        cout << "Before: x = " << x << ", y = " << y << endl;
        func(x, y);
        cout << "After: x = " << x << ", y = " << y << endl;
        return 0;
    }
    
    void func(int &a, int &b)
    {
        int tmp = a; a = b; b = tmp;
    }

        2-3 练习
        2-4 单元巩固

    第3章 C++语言const关键字

        3-1 const (08:39)

    const与基本数据类型;

    const int x = 3;

    const与指针类型; (规则很简单:const了谁,谁就不能改变了)

    const int *p = NULL;
    int const *p = NULL;
    int *const p = NULL;
    const int * const p = NULL;
    int const * const p = NULL;

    const与引用

    int x = 3;
    const int &y = x;
    x = 10;//right
    y = 20;//wrong
    //examples
    const int x = 3; x = 5; //wrong
    int x = 3; const int y = x; y = 5; //wrong
    int x = 3; const int *y = &x; *y = 5;//wrong
    //examples
    int x = 3, z = 4; int * const y = &x; y = &z; //wrong
    const int x = 3; const int &y = x; y = 5;//wrong
    const int x = 3; int *y = &x; //wrong
    int x = 3; const int *y = &x; //right


        3-2 const代码演示 (10:05)

    const int x = 3;
    x = 5;//wrong
    #define X 3 //C的形式,不建议使用,因为不会检查错误
    int const *p = &x;
    const int *p = &x;
    *p = 5;//wrong
    x = 5;//right **
    int x = 3;
    int y = 5;
    int *const p = &x;//p can't change
    p = &y;//wrong
    *p = 10;//right
    int const &z = x;
    z = 10;//wrong
    void func(const int &a, const int &b)
    {
        //can't change a and b
    }

        3-3 练习

    指针指向const修饰的变量时,应该是const int const *p = &a;
          3-4 单元巩固

    第4章 C++函数新亮点

        4-1 函数特性 (11:32)

    函数参数的默认值; (声明的时候必须写上参数默认值; 定义的时候则不用写); 没有实参时就使用默认值

    //有默认参数值的参数必须在参数表的最右端
    void func(int i, int j = 5, int k = 10);

    函数重载: 在相同作用域下;用同一名字定义多个函数; 不同函数之间的参数个数和参数类型必须不同;

    int getMax(int x, int y, int z);
    double getMax(double x, double y);
    //内部机密:重新生成函数
    getMax_int_int_int()
    getMax_double_double()

    内联函数(inline)(编译时将函数体代码和实参代替函数调用语句,省去了进入和返回的步骤; 节省了大量时间); (编译时代码展开)  

    区别于普通函数(调用时,找到入口,执行后,返回);

    inline int max(int a, int b, int x);
    int main()
    {
        int m = max(i,j,k);//直接使用
    }


        4-2 函数特性代码演示 (07:51)

    void func(int i, int j = 20, int k = 10);
    void func(int i, int j, int k);
    void func(double i, double j, double k);
    inline max(int i, int j)

        4-3 练习
        4-4 单元巩固

    第5章 C++内存管理

        5-1 内存管理 (06:31)

    内存的本质就是资源; 由操作系统控制; 我们需要申请和归还;

    内存的申请和释放 new 和 delete 运算符;

    int *p = new int;
    delete p;
    int *arr = new int[10];
    delete []arr;
    //C
    void *malloc(size_t * size);
    void free(void *memblock);
    //C++
    new;
    delete;
    int *p = new int[1000];
    if (NULL == p)
    {
        //fail
    }
    delete p;
    p = NULL;
    delete []p;
    p = NULL;
    /*
    使用new申请内存,使用delete释放内存;
    申请内存需要判断是否成功,释放内存需要设空指针;
    new与delete配套使用;
    */


        5-2 内存管理代码演示 (04:06)

    int *p = new int[20];
    cout << *p << endl;


        5-3 练习


        5-4 单元巩固

     

    C++远征之封装篇(上)

    第1章 课程介绍

        1-1 课程简介 (02:57)

    类和对象;

    数据成员和成员函数;

    构造函数和析构函数;

    对象赋值和对象复制;

    对象数组和对象指针;

    this指针;

    面向过程 -》 面向对象

    第2章 类与对象初体验

        2-1 类和对象 (04:27)

    一个存在的实体就是一个对象;同一类型的对象可以被抽象为一种类;

    抽象化类时,我们一般只抽象出自己感兴趣的属性和方法,而不会全部列出(事实上也不存在全部);

    封装,就是我们只向用户提供他们需要的东西,其他的都被封装在类里,不能被调用;

    封装是通过访问限定符来实现的:public;protected;private;

    class Dog
    {
        char name[20];
        int age;
        int type;
        
        void speak();
        void run();
    }


        2-2 类对象的定义 (11:56)

    1.从栈中实例化(就是让编译器自动申请);2.从堆中实例化(手动申请);

    class TV
    {
    public:
        char name[20];
        int type;
        
        void changeVol();
        void power();
    }
    int main(void)
    {
        TV tv;
        TV tv[20];
        return 0;
    }

    class TV
    {
    public:
        char name[20];
        int type;
        
        void changeVol();
        void power();
    }
    int main(void)
    {
        TV *p = new TV();
        TV *q = new TV[20];
        delete p;
        delete []q;
        return 0;
    }

    对象成员的访问;栈(.);堆(->);

    数组:p[i]->type;

    //zhan
    int main(void)
    {
        TV tv;
        tv.type = 0;
        tv.changeVol();
        return 0;
    }
    //dui
    int main(void)
    {
        TV *p = new TV();
        p->type = 0;
        p->changeVol();
        delete p;
        p = NULL;
        return 0;
    }
    int main(void)
    {
        TV *p = new TV[5];
        for(int i = 0; i < 5; i++)
        {
            p[i]->type = 0;
            p[i]->changeVol();
        }
        delete []p;
        p = NULL;
        return 0;
    }
    #include<iostream>
    using namespace std;
    
    class Coordinate
    {
    public:
        int x, y;
        void printX()
        {
            cout << x << endl;
        }
        void printY()
        {
            cout << y << endl;
        }
    };
    
    int main(void)
    {
        Coordinate coor;
        coor.x = 10;
        coor.y = 20;
        coor.printX();
        coor.printY();
        
        coordinate *p = new Coordinate();
        if(NULL == p)
        {
            return 0;
        }
        p->x = 100;
        p->y = 200;
        p->printX();
        p->printY();
        delete p;
        p = NULL;
        
        return 0;
    }

        2-3 练习

    第3章 初始字符串类型

        3-1 初始String (13:51)

    int double char float bool等常用且简单; char[]操作却很繁琐和复杂,需要使用strlen, strcat, strcpy, strcmp, strncpy, strncmp, strstr等字符数组函数来操作;

    为此引入字符类:string

    #include<iostream>
    #include<string>
    using namespace std;
    int main(void)
    {
        string name = "lizhixin";
        string hobby("football");
        cout << name << hobby << endl;
        return 0;
    }

    string的初始化方法:

    string s1;
    string s2("ABC");
    string s3(s2);
    string s4(n, 'c');
    //other usage
    s.empty();
    s.size();
    s[n];
    s1+s2;
    s1=s2;
    v1 == v2;
    v1 != v2;
    string s1 = "hello";
    string s2("World");
    string s3 = s1 + s2;
    string s4 = "hello" + s2;
    string s5 = "hello" + s2 + "world";
    string s6 = "hello" + "world";//wrong
    /*
    1.提示用户输入姓名;
    2.接受用户输入;
    3.然后向用户问好,hello XXX;
    4.告诉用户名字长度;
    5.告诉用户名字首字母;
    6.如果用户输入回车,这告诉用户输入为空;
    7.如果用户输入的是imooc,告诉用户是管理员;
    */
    #include<iostream>
    #include<string>
    using namespace std;
    
    int main(void)
    {
        string name;
        cout << "Please input your name:";
        getline(cin, name);
        if (name.empty())
        {
            cout << "input is null..."
            return 0;
        }
        if(name == "imooc")
        {
            cout << "you are a admin." << endl;
        }
        cout << "hello " << name << endl;
        cout << "your name length: " << name.size() << endl;
        cout << "your name's first letter is: " << name[0] << endl;
        return 0;
    }

        3-2 单元巩固

    第4章 属性封装的艺术

        4-1 初始封装 (05:30)

    面向对象的基本思想:数据成员需要被封装;只用成员函数操纵数据成员;这样可以防止对数据成员的随意更改;而函数则可以控制;


        4-2 属性封装代码演示 (09:47)

    一般讲public写在前面;private写在后面;

    class Student
    {
    public:
        void setName(string _name)
        {
            m_strName = _name;
        }
        string getName()
        {
            return m_strName;
        }
        void setGender(string _gender)
        {
            m_strGender = _gender;
        }
        string getGender()
        {
            return m_strGender;
        }
        int getScore()
        {
            return m_intScore;
        }
        void initSore()
        {
            m_iScore = 0;
        }
        void study(int _score)
        {
            m_iScore += _score;
        }
    private:
        string m_strName;
        string m_strGender;
        int m_intScore;
    }
    
    int main(void)
    {
        Student stu;
        stu.initScore();
        stu
        return 0;
    }

        4-3 单元巩固

    第5章 精彩的类外定义

        5-1 类外定义 (05:56)

    类内定义与内联函数;(类内定义的函数优先编译为内联函数)

    类外定义:同文件类外定义;分文件类外定义;(一般都是分文件定义)

    class Car
    {
    public:
        void run();
        void stop();
        void changeSpeed();    
    };
    void Car::run(){}
    void Car::stop(){}
    void Car::changeSpeed(){}
    //Car.h
    class Car
    {
        public:
        void run();
        void stop();
        void changeSpeed();
    };
    //Car.cpp
    #include "Car.h"
    void Car::run(){}
    void Car::stop(){}
    void Car::changeSpeed(){}

        5-2 类外定义代码演示 (11:28)
        5-3 练习

    第6章 对象的生离死别

        6-1 构造函数讲解 (08:26)

    对象结构:

    内存分区:栈区;堆区;全局区;常量区;代码区;

    //栈区
    int x = 0; int *p = NULL;
    //堆区
    int *p = new int[20];
    //全局区
    //常量区
    string str = "hello";
    //代码区

    对象的初始化(对象必须进行初始化):有且仅有一次;根据条件初始化;(这就是构造函数要干的事)

    构造函数在对象实例化时被自动调用;

    构造函数与类同名;

    构造函数可以重载;

    在没有定义构造函数时,编译器会自动生成一个构造函数;


        6-2 构造函数代码演示 (09:34)


        6-3 练习
        6-4 构造函数初始化列表 (05:28)

    默认构造函数;

    构造函数初始化列表;1.先于构造函数执行;2.只能用于构造函数;3.可以同时初始化多个数据成员;

    初始化列表的核心作用:

    Student():m_strName("Jim"),m_iAge(10){}


        6-5 初始化列表编码 (09:22)
        6-6 练习
        6-7 拷贝构造函数 (05:04)

    拷贝构造函数的参数是确定的,不能重载

    Student(const Student& stu){}


        6-8 拷贝构造函数代码演示 (03:57)
        6-9 练习
        6-10 析构函数 (05:08)

     


        6-11 析构函数代码演示 (06:09)
        6-12 练习

    第7章 课程总结

        7-1 总结 (04:32)
        7-2 综合练习

     

     

    数据结构探险—队列篇

    第1章 课程简介

        1-1 课程简介 (02:13)
    数据结构=数据集合+数据间的关系;都是前人总结出来的模型;站在巨人的肩膀上;

    本课程:数据结构的原理;C++实现;

    第2章 队列原理

        2-1 队列 (07:37)
    先入先出的数学模型(FIFO);排队买票;队头,对尾;

    普通队列;要么浪费内存,后来者往后排;要么浪费时间,所有元素前移;

    环形队列;课程重点讲解

    队列实例:营业厅的排号系统--自动排号机

    第3章 队列结构的面向对象设计

        3-1 面向对象的队列设计 (10:43)

    第4章 环形队列代码实现

        4-1 环形队列实现上 (12:23)
        4-2 环形队列实现下 (16:52)
        4-3 环形队列检测 (10:18)

    第5章 升华与应用

        5-1 队列的实际应用 (14:04)

  • 相关阅读:
    指针与引用
    const常量
    函数初始化列表
    Ubuntu18.04.3主力开发机使用记录(一)
    ZUI(BootStrap)使用vue动态插入HTMl所创建的data-toggle事件初始化方法
    一次JDBC支持表情存储的配置过程
    Springboot Rabbitmq 使用Jackson2JsonMessageConverter 消息传递后转对象
    搭建谷歌浏览器无头模式抓取页面服务,laravel->php->python->docker !!!
    Laravel 命令行工具之多线程同步大批量数据 DB连接混乱 解决方案
    nginx 之负载均衡 :PHP session 跨多台服务器配置
  • 原文地址:https://www.cnblogs.com/leezx/p/5682009.html
Copyright © 2020-2023  润新知