
C/C++学习
文章平均质量分 88
C/C++学习
王清欢Randy
解决问题,担当责任,优雅生活。
展开
-
初阶 C/C++ 入门指南
参考资料C语言/C++学习路线图(2021整理)要不要学 C++如果说你学 C++ 的时候,没有学到 C++ 那部分“无论什么语言都会很有帮助”的那部分,那算是白学了:资源所有权(shared_ptr/unique_ptr/observer_ptr),RAII(finally/using/defer)2.泛型(你会发现很多语言所谓的“泛型”都是 C++ 模板的阉割版本)优化往往要求对编译器优化、对象模型、操作系统与组成原理有很多了解内存管理(内存池之类)数据结构 & 算法(STL)(原创 2021-11-23 10:59:12 · 2974 阅读 · 0 评论 -
C++11 常用新特性汇总
文章目录统一的初始化方法auto关键字decltype关键字返回类型后置右值引用与移动构造函数左值和右值的基本概念右值引用移动构造函数move函数智能指针 shared_ptr空指针 nullptr基于范围的 for 循环无序容器Lambda 表达式统一的初始化方法 在C++11中可以直接在变量名后加上初始化列表来对对象进行初始化。 在此之前,C++中的初始化方式很多,有初始化列表、拷贝初始化和直接初始化等,例如:class A{public: int a; int b; A(原创 2021-09-01 16:42:11 · 2981 阅读 · 2 评论 -
C++ 标准模板库 STL 容器适配器
C++ 标准模板库 STL 容器适配器容器数据结构时间复杂度顺序性重复性stackdeque / list顶部插入、顶部删除 O(1)无序可重复queuedeque / list尾部插入、头部删除 O(1)无序可重复priority_queuevector + max-heap插入、删除 O(log2n)有序可重复 容器适配器和容器的主要差别在于,容器适配器没有迭代器,所以STL中的算法无法直接在容器适配器中使用。栈 stack原创 2021-08-30 11:16:02 · 2838 阅读 · 0 评论 -
C++ 标准模板库 STL 关联容器
C++ 标准模板库 STL 关联容器容器数据结构时间复杂度顺序性重复性set红黑树插入、删除、查找 O(log2n)有序不可重复multiset红黑树插入、删除、查找 O(log2n)有序可重复map红黑树插入、删除、查找 O(log2n)有序不可重复multimap红黑树插入、删除、查找 O(log2n)有序可重复unordered_set哈希表插入、删除、查找 O(1) 最差 O(n)无序不可重复unord原创 2021-08-29 17:08:40 · 2976 阅读 · 0 评论 -
C++ 标准模板库 STL 函数对象
函数对象函数对象的基本概念函数对象:如果一个类重载了运算符(),及重载了括号运算符的类,其产生的对象都将成为函数对象。函数对象是个对象,但是用起来看上去像函数调用,实际上也执行了函数调用。// 函数对象类class CMyAverage{public: double operator() (int a, int b, int c){ return (double)(a+b+c)/3; }};int main(){ CMyAverage average;原创 2021-08-27 15:08:52 · 2868 阅读 · 0 评论 -
C++ 标准模板库 STL 顺序容器
C++ 标准模板库 STL 顺序容器容器数据结构顺序性重复性支持迭代器vector动态数组无序可重复随机访问迭代器deque双向队列无序可重复随机访问迭代器list双向链表无序可重复双向迭代器动态数组 vector vector #include <vector> 动态数组:其元素在内存中是连续存放的,随机存取任何元素都可以在常数时间内完成,在该容器的尾部增删元素也几乎能够在常数时间内完成具有较好的性能。 一个 vec原创 2021-05-11 13:43:20 · 6727 阅读 · 0 评论 -
C++ 标准模板库 STL 概述
C++ 标准模板库 STL 概述泛型程序设计C++ 的特点: C++ 的核心优势之一就是便于软件重用,而软件的重用在 C++ 中主要体现在以下两个方面:面向对象的思想:继承、多态和标准类库泛型程序设计的思想:模板机制和标准模板库 STL泛型程序设计: 泛型程序设计通俗地讲就是使用模板的程序设计方法。泛型程序设计中将一些常用的数据结构(例如链表、数组和二叉树等)和算法(例如排序和查找等)写成模板,这样在后续的使用中不管数据结构中存放的是什么数据对象,算法应用于什么类型的数据对象,都不需要原创 2021-04-16 19:54:52 · 9423 阅读 · 15 评论 -
C++ string类
C++ string类string 的初始化 使用 string 类要导入头文件 #include <string>,string 类是模板类 typedef basic_string<char> string; 从 basic_string 类模板实例化生成的。string 类有多种构造函数,string 对象的几种初始化方式如下string s1("Hello");string month = "March";string s2(8,'x'); // 生成具有8个x原创 2021-04-15 21:29:56 · 9387 阅读 · 0 评论 -
C++ 泛型编程
C++ 泛型编程函数模板函数模板的概念: 是一种特殊的函数,可以使用不同的类型进行调用,对于功能相同的函数,不需要重复编写代码,实现代码复用,并且函数模板与普通函数看起来很类似,区别就是类型可以被参数化。所谓模板就是可以以此为基础批量生成相似的事物,函数模板就是可以用它来自动生成很多相似的函数,更高级的函数重载。函数模板通过 template 与 typename/class 关键字来定义,另外,函数模板中可以有不只一种类型的参数。template <class Type1, class T原创 2021-04-09 14:53:12 · 8650 阅读 · 0 评论 -
C++ 输入输出流
C++ 输入输出流输入输出流基本概念与输入输出流操作相关的类:类的继承关系从上往下如下图所示istream:用于输入的流类,cin 是该类的对象ostream:用于输出的流类,cout cerr clog 是该类的对象ifstream:用于从文件读取数据的类ofstream:用于向文件写入数据的类iostream:既能用于输入,又能用于输出的类fstream:既能从文件读取数据,又能向文件写入数据的类标准流对象:cin 对应于标准输入流,用于从键盘读取数据,也可以被重定向为从文原创 2021-04-06 20:08:54 · 9910 阅读 · 0 评论 -
C++ 多态
C++ 多态虚函数和多态的概念虚函数:在类的定义中,有 virtual 关键字的成员函数就是虚函数,形如:class Base{ public: virtual int get(); };int Base::get(){} // virtual 关键字只需要在类内声明class Derived:public Base{ public: virtual int get();};int Derived::get(){}int main(){原创 2021-03-29 21:16:02 · 8567 阅读 · 0 评论 -
C++ 继承
C++ 继承继承和派生的概念继承:在定义一个新的类 B 时,如果该类与某个已有的类 A 相似,指的是 B 拥有 A 的全部特点,在属性上 A 是 B 的子集;那么就可以把 A 作为一个基类,而把 B 作为基类的一个派生类也称为子类。派生类:派生类是通过对基类进行修改和扩充得到的。在派生类中,继承了基类的全部成员函数和成员变量,不论是 private, protected , public,但是在派生类的各成员函数中,仍旧不能直接访问基类中的 private 成员;除此之外派生类还可以扩充新的成员变量和原创 2021-03-23 20:33:06 · 8427 阅读 · 0 评论 -
C++ 运算符重载
运算符重载运算符重载的基本概念运算符重载的应用场景:运算符重载的需求是在对象运算中体现的,C++ 中希望通过对运算符的重载扩展运算符的适用范围,使对象也能通过运算符进行运算,这样可以使代码更加简洁和易理解。运算符重载的形式:// ReturnType:返回值类型; OperatorType:运算符类型; ParamList:形参表ReturnType operator OperatorType(ParamList){ Function Body;}运算符重载实际上是函数重载:原创 2021-03-17 20:26:11 · 8810 阅读 · 0 评论 -
C++ 类和对象提高
C++ 类和对象提高this 指针this 指针的概念:是一个隐含于每一个非静态成员函数中的特殊指针,其作用就是指向调用该成员函数的那个对象。换言之,非静态成员函数中可以直接使用 this 来代表指向该函数作用的对象的指针。class Complex{ public: double real, img; Print(){cout<<real<<" , "<<img<<endl;} Complex(double r,原创 2021-03-15 11:17:41 · 8475 阅读 · 0 评论 -
C++ 构造函数与析构函数
C++ 构造函数与析构函数构造函数的基本概念构造函数: 构造函数是类的一种特殊成员函数,它的名字和类名相同,可以有参数,但是没有返回值。类中定义的构造函数在对象生成时被调用,其作用是对对象初始化,进行成员变量赋值之类的操作。如果类中没有定义构造函数,编译器在编译过程中会为类生成一个默认的无参构造函数,并不进行任何操作。 构造函数的意义:简化了对象的初始化工作,有了构造函数就不用专门再写初始化函数,也不用担心在生成对象时忘记调用初始化函数。对象名也相当于一个指针,如果没被初始化就使用将导致程序出错原创 2021-03-12 16:19:26 · 8559 阅读 · 0 评论 -
C++ 类和对象基础
C++ 类和对象基础结构化程序设计结构化程序设计的概念:是进行以**模块**功能和处理过程设计为主的详细设计的基本原则。结构化程序设计是面向过程程序设计的一个子集,它对写入的程序使用逻辑结构,使得理解和修改更有效更容易。结构化程序设计的基本结构: 结构化程序是由若干个基本结构组合而成,每一个结构可以包含若干条语句和其他基本结构。结构化程序设计中包含三种基本的结构:顺序结构、选择结构和循环结构。顺序结构:表示程序中的各操作是按照它们出现的先后线性,有序地执行。顺序结构的程序又称简单程序,这种结构原创 2021-03-10 10:33:53 · 8555 阅读 · 0 评论 -
从 C 到 C++
从 C 到 C++01 引用引用的概念:某个变量的引用,等价于这个变量,相当于该变量的一个别名引用的定义: 类型名 & 引用名 = 某变量名;int param = 4;int & alias = param; // alias 引用了 param, alias 的类型是 int &引用与指针的区别: C++ 中对对象的定义为:对象是指一块能存储数据并具有某种类型的内存空间。一个对象 a,它有值和地址 &a;运行程序时,计算机会为该对象分配存储空间,来存储原创 2021-03-05 17:01:56 · 8273 阅读 · 0 评论 -
C语言 文件与底层操作
文件操作格式化输入输出printf("%[flags][width][.prec][hlL]type")scanf("%[flag]type")printf和scanf的返回值:读入的项目数,输出的字符数#include<stdio.h>int main(int argc, char const *argv[]){ int number; int i = scanf("&i",&number); int j = printf("原创 2021-11-23 10:47:06 · 3106 阅读 · 0 评论 -
C语言 程序结构
程序结构5.1全局变量 全局变量具有全局的作用域和生存周期 全局变量的使用与函数无关 局部变量的作用域和生存期是一致的 全局变量的初始化,未初始化的全局变量会被编译器自动初始化为0或者NULL 全局变量与局部变量同名时,全局变量会被隐藏 静态本地变量 当函数离开时,静态本地变量将继续存在并保持原值;对静态本地变量的初始化只会在...原创 2020-02-27 17:17:37 · 7987 阅读 · 0 评论 -
C语言 结构类型
结构类型3.1枚举 常量符号化:增加代码可读性,用名称代替固定的数字常量 枚举类型:enum name{elem1,elem2,elem3};,枚举量都是int 自动计数的枚举:enum name{elem1,elem2,elem3,len};其中len的值可以直接作为枚举类型的枚举量个数及其长度 枚举的作用:声明有排比意义的符号化常量,枚举比const i...原创 2020-02-27 17:15:03 · 7447 阅读 · 0 评论 -
C语言 指针与字符串
指针与字符串2.1指针的使用 函数返回多个值,通过指针返回结果,指针作为形式参数 2.1.1.c 函数返回运算状态,结果通过指针返回。即C语言中的try/catch 2.1.2.c 指针在使用之前一定要初始化,赋予指针变量地址 对数组进行操作 动态申请内存空间 指针与数组 数组变量是特殊的指针 //以下四中函数原型是等价的 数组名...原创 2020-02-27 17:11:08 · 7535 阅读 · 0 评论 -
C语言 数据类型
数据类型C语言是有数据类型的语言,C之后分为C++/Java为代表的更加强调类型的语言与Python/JS这种弱化类型的语言,强调类型的语言更加适合底层开发。C语言中类型的作用:1.占据空间大小 2.输出格式 3.sizeof是静态运算符#include <stdio.h>int main(){ int a; printf("sizeof(a++)=%...原创 2020-02-27 17:05:22 · 7336 阅读 · 0 评论