c/c++
文章平均质量分 83
c/c++内容
~小火苗
这个作者很懒,什么都没留下…
展开
-
FILE文件操作
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE.不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。原创 2023-02-17 16:30:21 · 651 阅读 · 0 评论 -
C++的类型转换
在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换。因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。原创 2022-12-25 14:15:41 · 119 阅读 · 0 评论 -
特殊类设计
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊, 初始化网络连接啊,读取文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。原创 2022-12-25 14:15:21 · 218 阅读 · 0 评论 -
C++智能指针
借此,我们实际上把管理一份资源的责任托管给了一个对象。原创 2022-12-25 14:13:35 · 281 阅读 · 0 评论 -
c++异常
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。// 服务器开发中通常使用的异常继承体系 class Exception {public :// 错误信息 int _id;// 错误码 };原创 2022-12-25 14:12:15 · 60 阅读 · 0 评论 -
C++11
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。原创 2022-12-25 14:11:41 · 180 阅读 · 0 评论 -
哈希知识点
最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,本文中只对unordered_map和unordered_set进行介绍,unordered_multimap和unordered_multiset可查看文档介绍。注意:布隆过滤器如果说某个元素不存在时,该元素一定不存在,如果该元素存在时,该元素可能存在,因为有些哈希函数存在一定的误判。原创 2022-12-25 14:11:11 · 281 阅读 · 0 评论 -
map和set
根据应用场景的不桶,STL总共实现了两种不同结构的管理式容器:树型结构与哈希结构。树型结构的关联式容器主要有四种这四种容器的共同点是:使用平衡搜索树(即红黑树)作为其底层结果,容器中的元素是一个有序的序列。下面一依次介绍每一个容器。set是按照一定次序存储元素的容器在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。原创 2022-12-25 14:10:03 · 247 阅读 · 0 评论 -
c++多态知识
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。原创 2022-12-24 20:06:44 · 209 阅读 · 0 评论 -
c++继承知识点
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public :// 姓名 int _age = 18;// 年龄 };// 继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。原创 2022-12-24 20:06:18 · 211 阅读 · 0 评论 -
list.
list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。原创 2022-12-24 20:05:55 · 210 阅读 · 0 评论 -
vector
vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是。原创 2022-12-24 20:05:29 · 619 阅读 · 0 评论 -
string
【代码】string。原创 2022-09-27 14:05:06 · 80 阅读 · 0 评论 -
C/C++内存管理
;// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间 //还会调用构造函数和析构函数 A * p1 =(A *) malloc(sizeof(A));free(p1);// 内置类型是几乎是一样的 int * p3 =(int *) malloc(sizeof(int));free(p3);free(p5);return 0;}原创 2022-09-27 14:04:40 · 117 阅读 · 0 评论 -
c++类和对象
c++类和对象原创 2022-09-27 14:04:24 · 301 阅读 · 0 评论 -
C++模板
如何实现一个通用的交换函数呢?原创 2022-09-27 14:03:46 · 54 阅读 · 0 评论 -
C++入门
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中//1. 普通的命名空间 namespace N1 // N1为命名空间的名称 {// 命名空间中的内容,既可以定义变量,也可以定义函数/结构体 int a;int val;};} //2. 可以嵌套 namespace sql {int val;};} }原创 2022-09-27 14:03:20 · 127 阅读 · 0 评论 -
extern和static、#define和typedef
externextern修饰全局变量extern在一个文件内扩展全局变量的作用域(这种情况要发挥其作用的话不能被省略)将全局变量的作用域扩展到其他文件(可以省略, 一般不写)extern修饰函数(可以省略,一般不写)在一个工程中修饰全局变量, 将全局变量的作用域限制在本文件修饰局部变量, 改变局部变量的生命周期(将局部变量存储在静态区)区别(1)#define之后不带分号,typedef之后带分号。(2)#define可以使用其他类型说明符对宏类型名进行扩展,而 typ原创 2022-06-28 13:06:08 · 560 阅读 · 0 评论 -
动态内存管理
目录为什么存在内存分配动态内存函数的介绍malloc和freecallocrealloc常见的动态内存错误对NULL指针的解引用操作对动态开开辟空间的越界访问对非动态开辟内存使用free释放使用free释放一块动态开辟内存的一部分对同一块动态内存多次释放动态开辟内存忘记释放(内存泄漏)几个经典的笔试题题目1![在这里插入图片描述](https://img-blog.csdnimg.cn/af3139493bcd498382550baf102ebc28.png)题目2题目3题目4C/C++程序的内存开辟柔性数原创 2022-04-17 21:11:56 · 139 阅读 · 0 评论 -
程序环境和预处理
目录1. 程序的翻译环境和执行环境2. 详解编译+链接编译环境运行环境3. 预处理详解预定义符号4. #define#define 定义标识符#define 定义宏#define 替换规则#和###的作用## 的作用带副作用的宏参数宏和函数对比5. 命名约定6. #undef7. 命令行定义8. 条件编译9. 文件包含嵌套文件包含10. 其他预处理指令1. 程序的翻译环境和执行环境在ANSI C的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2原创 2022-04-16 14:20:16 · 69 阅读 · 0 评论 -
指针详详姐
目录1. 字符指针2. 指针数组1. 字符指针int main(){ const char* p1 = "abcdef"; const char* p2 = "abcdef"; char arr1[] = "abcdef"; char arr2[] = "abcdef"; if (p1 == p2) { printf("p1 == p2\n"); } else { printf("p1 != p2\n"); } if (arr1 == arr2) { prin原创 2022-04-14 15:19:10 · 791 阅读 · 0 评论 -
自定义类型详解
目录结构体结构体的特殊声明结构体的自引用结构体的定义和初始化结构体的内存对齐(很重要)为什莫存在最大对齐结构体传参是传值还是传地址结构体结构体的特殊声明//匿名结构体类型struct{ int a; char b; float c;}x;struct{ int a; char b; float c;}a[20], *p;上面的两个结构在声明的时候省略掉了结构体标签(tag)。那么问题来了?在上面代码的基础上,下面的代码合法吗?p = &x;对于匿名结原创 2022-04-02 20:14:10 · 446 阅读 · 0 评论 -
c语言模拟实现字符函数和内存函数
目录strlenstrcpystrcatstrcpystrstrstrtokstrerror与perrormemcpymemmovememsetstrlen/// strlen<string.h>/// size_t strlen( const char *string );/*求的是字符串的长度即‘\0’前面字符的个数,不计算‘\0’特别要注意的是strlen返回的数字为是无符号类型,比较的时候要注意强制类型、转换*/ //循环int my_strlen1(const c原创 2022-03-24 14:50:21 · 2102 阅读 · 0 评论 -
滑动窗口算法思想
目录说明例子连续子数组的最大和和为target的连续正整数序列长度最小的子数组水果成篮最长不重复子串的长度字符串的排列最小覆盖子串滑动窗口最大值说明滑动窗口算法思想是非常重要的一种思想,可以用来解决数组,字符串的子元素问题。它可以将嵌套循环的问题,转换为单层循环问题,降低时间复杂度,提高效率。滑动窗口的思想非常简单,它将子数组(子字符串)理解成一个滑动的窗口,然后将这个窗口在数组上滑动,在窗口滑动的过程中,左边会出一个元素,右边会进一个元素,然后只需要计算当前窗口内的元素值即可。可用滑动窗口思想解决转载 2022-03-05 12:25:57 · 3149 阅读 · 0 评论 -
数据的存储
目录类型的基本归类整形家族浮点数家族源码、反码、补码大小端介绍类型的基本归类整形家族char (char有符号还是没有符号不确定,取决于编译器)unsigned charsigned charshortunsigned short [int]signed short [int]intunsigned intsigned intlongunsigned long [int]signed long [int]浮点数家族floatdou原创 2022-03-04 19:52:13 · 472 阅读 · 0 评论 -
所有常见排序详解
2.3希尔排序(缩小增量排序)3.选择排序3.1基本思想4.交换排序4.1基本思想4.3快速排序4.3.2递归+三数取中+小区间优化4.3.3非递归+三数取中5.归并排序5.1基本思想5.3归并非递归5.3.1为什么不能使用栈......原创 2022-02-26 17:21:20 · 1140 阅读 · 0 评论 -
c语言const深入理解
c语言中const用法(转)一. 可能的组合:(1)const char*p /只能通过指针去读取,不能通过指针去修改/(2)char const*p /只能通过指针去读取,不能通过指针去修改/(3)char *const p /p指向地址不能变,内容可变/(4)const char **p(5)char const**p(6)char *const *p(7)char **const p当然还有在(5)、(6)、(7)中再插入一个const的若干情况,不过分析了以上7中,其他的就可原创 2022-02-24 17:39:08 · 385 阅读 · 0 评论 -
const修饰指针的三种效果
const修饰指针的三种效果,C语言const修饰指针详解前面讲过,当一个变量用 const 修饰后就不允许改变它的值了。那么如果在定义指针变量的时候用 const 修饰会怎样?同样必须要在定义的时候进行初始化。比如:int a;int *p = &a;当用 const 进行修饰时,根据 const 位置的不同有三种效果。原则是:修饰谁,谁的内容就不可变,其他的都可变。1) const int*p=&a;同样 const 和 int 可以互换位置,二者是等价的。我们以放在最原创 2022-02-24 17:38:22 · 48 阅读 · 0 评论 -
c语言的输出语句
本小节介绍的是向标准输出设备显示器输出数据的语句。在C语言中,所有的数据输入/输出都是由库函数完成的。因此都是函数语句。本小节先介绍printf函数和putchar函数。printf函数printf函数称为格式输出函数,其关键字最末一个字母f即为“格式”(format)之意。其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上。一、printf函数调用的一般形式printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用 printf 函数之前必须包含st原创 2022-02-24 17:37:48 · 23441 阅读 · 0 评论 -
c++输入输出格式
1. 输入和输出8进制,10进制,16进制数#include<iostream>using namespace std;int main(){ int number=25; //常量必须用dec、hex和oct来控制必须按10进制、16进制或8进制形式输出。 //由于这三个标识符(dec/hex/oct)已经被定义为系统常量,注意不能在定义为其他变量名使用 cout<<" 8进制: "; cout<<oct<<number<<en原创 2022-02-24 17:33:38 · 2110 阅读 · 0 评论 -
*p++、*(p++)、(*p)++、*++p、++*p的区别
1. 后缀++ 和 -- 大于 前缀 ++ 和 -- 大于 *2.后缀是先使用后加加,后缀是先加加后使用*p++ int arr[] = { 1,4,7,9,10 }; int* p = arr; printf("原*p的值: %d\n", *p); // 1 /// 后置++的优先级高于*,即 先p++ 后*p 但是后置++ 是先使用后++ /// 所以先使用 p 此时p为首元素地址 解引用p得到 1 赋给 a ,p使用完后++, p为第二个元素地址 int...原创 2022-02-24 17:31:52 · 4693 阅读 · 1 评论 -
C语言实现的简单扫雷
扫雷里面包含三个文件,一个头文件,两个源文件1.主文件#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu(){ printf("**********************************\n"); printf("******** 1. play *******\n"); printf("******** 0. exit *******\n"); printf("**原创 2022-01-26 20:33:57 · 450 阅读 · 0 评论 -
c语言写的简单三子棋
三子棋游戏在一个工程里面创建三个文件,一个头文件(.h)两个源文件(.c)。1.主文件#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu(){ printf("**********************************\n"); printf("********** 1. play ***********\n"); printf("********** 0. exit ***********\原创 2022-01-26 20:26:13 · 2801 阅读 · 0 评论