
#C++
文章平均质量分 90
从C++入门到精通
秋悠然
大一人工智能专业的学生 梦想是成为万人敬仰的人工智能工程师 主攻C语言、数据结构算法、C++语言、Linux系统编程、Linux网络编程、MySQL数据库。希望能结交各路的编程朋友。
展开
-
探索C/C++的奥秘之C++中的继承
被继承的类Person是父类,也称作基类。Student是子类,也称作派生类。继承代码演示:public:protected:// 姓名//年龄protected:int _stuid;// 学号protected:int _jobid;// 工号int main()Student s;Teacher t;s.Print();//可以使用基类中的成员函数和成员变量t.Print();return 0;原创 2024-11-28 15:56:52 · 978 阅读 · 2 评论 -
探索C/C++的奥秘之stack和queue
1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。具体什么是适配器呢?其实就是由现有的东西进行转换,转化出我要的东西。container adaptor就是适配器,2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。原创 2024-11-21 20:30:15 · 729 阅读 · 31 评论 -
探索C/C++的奥秘之list
1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率 更好。原创 2024-11-20 14:09:53 · 3267 阅读 · 101 评论 -
探索C/C++的奥秘之vector
1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小 为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。原创 2024-11-17 19:35:48 · 1111 阅读 · 3 评论 -
探索C/C++的奥秘之string类(二)
常规情况下,流插入和c_str()是没有差别的,有一种情况下是有差别的,c_str()是返回C型的字符串,c型字符串是怎么打印的呢,相当于打印的是一个内置类型,内置类型也就相当于打印的const char* ,const char*打印的原则是遇到“\0”就终止了,而流插入的重载,不管\0,跟\0没有关系,它用范围for或者size()的长度去走,长度是多长,实际就要打印多长。// //capacity不包含\0,一般不包含,因为capacity指的是能包含多少个有效字符,\0不是有效字符。原创 2024-11-13 13:13:04 · 985 阅读 · 1 评论 -
探索C/C++的奥秘之string类
string叫串,是一个管理字符数组的类,其实就是一个字符数组的顺序表,通过成员函数对字符串进行增、删、查、改。C++标准库里面的东西都在std这个命名空间中。return 0;原创 2024-11-06 17:47:04 · 1031 阅读 · 3 评论 -
探索C/C++的奥秘之STL简介
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。io流不是STL的,是C++库里面的东西,原创 2024-10-28 09:19:37 · 355 阅读 · 5 评论 -
探索C/C++的奥秘之模板初阶
class 类模板名// 类内成员定义类模板无法通过推演实例化,必须要显示实例化。// 类模板public:_size = 0;_size++;int _size;惠普的实验室里面产生了STL,STL叫标准模板库,实现的是常见的数据结构和算法,也是常见的数据结构和算法的库。原创 2024-10-28 00:23:31 · 611 阅读 · 2 评论 -
探索C++的奥秘之C/C++内存管理
new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放对象的空间new T[N]的原理1. 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申 请2. 在申请的空间上执行N次构造函数delete[]的原理。原创 2024-10-27 18:53:23 · 960 阅读 · 0 评论 -
探索C++的奥秘之类和对象(下)
注意:1. 每个成员变量在初始化列表中最多只能出现一次,不出现也是可以的(初始化只能初始化一次)2. 类中包含以下成员,必须放在初始化列表位置进行初始化:引用成员变量const成员变量自定义类型成员(且该类没有默认构造函数时)class Apublic://{//}A(int a):_a(a)private:int _a;class Bpublic://初始化列表:_n(a),_ref(ref)原创 2024-10-24 21:12:09 · 781 阅读 · 2 评论 -
类与对象(中)
class Datepublic:private:int _year;int _month;int _day;int main()Date d;d.Print();return 0;原创 2024-10-18 11:16:10 · 592 阅读 · 0 评论 -
类与对象(上)
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。cpp中一般长的函数就会声明和定义分离,短的函数直接在类里面定义。原创 2024-10-17 01:37:59 · 876 阅读 · 2 评论 -
1.C++入门基础(补充)
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。1.正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;//2. 命名空间可以嵌套int a;int b;int c;int d;//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。// ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个// test.h。原创 2024-10-13 08:36:02 · 1005 阅读 · 1 评论 -
2.类和对象(上)
你要访问我的数据,本质是通过调用我的函数去访问,比如说要初始化,调用Init函数,要插入数据,调用Push,也不用关心Top到底是指向栈顶元素还是栈顶元素的下一个,要插入数据就插入,要获取栈顶元素就获取,要初始化就初始化,要销毁就销毁,不用管里面的细节,这是一种封装的体现,这呢对比C语言是有好处的,有什么好处呢?实例化出的对象占用实际的物理空间,存储类成员变量。类是对象进行一种抽象描述,是一个模型一样的东西,限定了类有哪些成员变量,这些成员变量只是声明,没有分配空间,用类实例化出对象时,才会分配空间。原创 2024-08-07 23:05:26 · 1100 阅读 · 114 评论 -
C++入门基础(二)
引用不是新定义一个变量,而是给已存在变量取了⼀个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如:水浒传中李逵,宋江叫"铁牛",江湖上人称"黑旋风";林冲,外号豹子头;C++中为了避免引入太多的运算符,会复用C语言的⼀些符号,比如前面的>,这里引用也和取地址使用了同⼀个符号&,大家注意使用方法角度区分就可以。int a = 0;//引⽤:b和c是a的别名int& b = a;int& c = a;//也可以给别名b取别名,d。原创 2024-08-04 20:14:15 · 3007 阅读 · 89 评论 -
C++入门基础
• 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。• namespace本质是定义出⼀个域,这个域跟全局域各自独立,在同一个域不能定义同名变量,不同的域可以定义同名变量,所以下面的rand不在冲突了。• C++中域有函数局部域,全局域,命名空间域,类域(这几个域都可以做名字隔离,在这几个域中定义同一个变量名,是不会冲突的);原创 2024-08-02 09:36:39 · 2232 阅读 · 79 评论