C++ 工程师
C和C++区别
1.输入输出
- C语言的输入输出主要使用printf和scanf等函数。
- C++引入了更类型安全和方便的输入输出流(iostream)库。
2.内存管理
- C语言主要依靠手动内存管理(malloc和free)。
- C++除了手动管理(new和delete),还提供自动内存管理),以及智能指针
3.编程范式
- C语言是一种过程式编程语言。
- C++支持多种编程范式,包括过程式,面向对象和泛型编程。
4.面向对象特性
- C语言不支持面向对象的概念,如类、对象、继承、多态等。
- C++引入了面向对象的特性,使代码组织和复用更加灵活和高效
5.数据类型丰富度
- C++在C语言的基础上增加了许多新的数据类型,如引用、bool类型等,
6.异常处理
- C语言通常通过返回值或特定的约定来处理错误,
- C++提供了更强大的异常处理机制,能够更清晰和方便地处上理运行时错误。
7.模板
- C++支持模板,可实现泛型编程,提高代码的通用性。
8.函数重载
- C语言不支持函数重载。
- C++允许函数名相同但参数不同的函数重载,提高了代码的可读性和可维护性。
学了C++,没必要再系统的学C
- 1~3有些细微差别
- 4~8是C没有的,而C++有
C++ –> Python
- 如果先学C++再学Python,你会发现Python太简单了
- 但是先学Python再学C++,你会发现开启了“地狱模式”
学习路线
基础语法
输入、输出、注释、变量、常量、关键字 整型、浮点、字符、转义布尔、字符串 算术、赋值、比较、逻辑、逗号、运算符 位与、位或、左移、右移、异或、位取反 if语句、ifelse语句elseif语句、switch while、dowhile、for、break、continue 数组概念、数组定义、数组初始化 数组访问、数组遍历、数组套数组 函数概念、函数定义、函数的声明 函数调用、函数传参、函数返回值 指针常量、常量指针、常量指针常量 指针函数、函数指针、指针函数指针 指针数组、数组指针、指针数组指针 结构体、结构体指针、结构体指针数组 结构体数组指针、结构体常量指针数组 联合体、堆区、栈区、全局区 代码区、常量引用、指针引用
面向对象
类的概念、对象的概念 属性和行为、访问权限、属性私有化 构造函数、析构函数、拷贝构造函数 初始化列表、静态成员变量和函数 this指针、const修饰成员、mutable 全局函数作为友元、类作为友元 成员函数作为友元、加号的重载 左移重载、递增重载、赋值重载 关系重载、函数调用重载、继承语法 继承方式、构造析构顺序、同名属性 同名函数访问、多继承、多态的语法 虚函数、纯虚函数、抽象类 虚析构、纯虚析构
泛型、STL
函数模板、类模板
vector、string
deque、list
stack、
queue
set、map
priority_queue
unordered_set
unordered_map
基础数据结构
顺序表、单向链表、栈和队列 串、树、二叉树、二叉搜索树 哈希表、邻接表、图邻接矩阵
进阶数据结构
高精度、双向链表、链式前向星 二叉堆、单调栈、单调队列 并查集、离散化、树状数组 字典树、线段树、平衡二叉树
基础算法
线性枚举、模拟递推 选择、冒泡、插入、计数 归并、快速、桶排、基排 堆排序、哈希算法、贪心算法 前缀和、双指针、滑动窗口 二分查找、Dijkstra、Prim 深搜+广搜、Bellman-Ford Floyed. Dijkstra + Heap SPFA、拓扑排序、动态规划
进阶算法
线性DP、记忆化搜索、背包DP 01背包、完全背包、多重背包 分组背包、依赖背包、树形DP 数位DP、状压DP、区间DP 字符串哈希、manacher LCA、二分匹配、强连通分量