- 前言在上两篇中,我们已经学习了string类的一个使用,并且做了一些相关的OJ练习,相信大家现在对于string的使用已经没什么问题了。那我们这篇文章呢,就来带大家对string进行一个模拟实现,这篇文章过后,有些地方大家或许就可以理解的更深刻一点。1. string的结构那通过之前文章的学习我们已经对string有了一些了解了:我们知道,string的底层其实就是一个支持动态增长的字符数组... 前言在上两篇中,我们已经学习了string类的一个使用,并且做了一些相关的OJ练习,相信大家现在对于string的使用已经没什么问题了。那我们这篇文章呢,就来带大家对string进行一个模拟实现,这篇文章过后,有些地方大家或许就可以理解的更深刻一点。1. string的结构那通过之前文章的学习我们已经对string有了一些了解了:我们知道,string的底层其实就是一个支持动态增长的字符数组...
- C++ 又可以称为“带类的 C”,即可以理解为 C++ 是 C 语言的基础上增加了面向对象(类和对象)。在此基础上,学过 C 语言的读者应该知道,它有一整套完成数据读写(I/O)的解决方案:使用 scanf()、gets() 等函数从键盘读取数据,使用 printf()、puts() 等函数向屏幕上输出数据;使用 fscanf()、fgets() 等函数读取文件中的数据,使用 fprintf... C++ 又可以称为“带类的 C”,即可以理解为 C++ 是 C 语言的基础上增加了面向对象(类和对象)。在此基础上,学过 C 语言的读者应该知道,它有一整套完成数据读写(I/O)的解决方案:使用 scanf()、gets() 等函数从键盘读取数据,使用 printf()、puts() 等函数向屏幕上输出数据;使用 fscanf()、fgets() 等函数读取文件中的数据,使用 fprintf...
- 隐式类型转换是安全的,显式类型转换是有风险的,C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么。但是,这种强调风险的方式还是比较粗放,粒度比较大,它并没有表明存在什么风险,风险程度如何。再者,C风格的强制类型转换统一使用( ),而( )在代码中随处可见,所以也不利于使用文本检索工具(例如 Windows 下的 Ctrl+F、Linux 下的 grep 命令、M... 隐式类型转换是安全的,显式类型转换是有风险的,C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么。但是,这种强调风险的方式还是比较粗放,粒度比较大,它并没有表明存在什么风险,风险程度如何。再者,C风格的强制类型转换统一使用( ),而( )在代码中随处可见,所以也不利于使用文本检索工具(例如 Windows 下的 Ctrl+F、Linux 下的 grep 命令、M...
- KMP算法是一种高效的字符串匹配算法,它的核心思想是利用已经匹配成功的子串前缀的信息,避免重复匹配,从而达到提高匹配效率的目的。KMP算法的核心是构建模式串的前缀数组Next,Next数组的意义是:当模式串中的某个字符与主串中的某个字符失配时,Next数组记录了模式串中应该回退到哪个位置,以便继续匹配。Next数组的计算方法是找出模式串每一个前缀中最长的相等前缀和后缀,并记录下来它们的长度,... KMP算法是一种高效的字符串匹配算法,它的核心思想是利用已经匹配成功的子串前缀的信息,避免重复匹配,从而达到提高匹配效率的目的。KMP算法的核心是构建模式串的前缀数组Next,Next数组的意义是:当模式串中的某个字符与主串中的某个字符失配时,Next数组记录了模式串中应该回退到哪个位置,以便继续匹配。Next数组的计算方法是找出模式串每一个前缀中最长的相等前缀和后缀,并记录下来它们的长度,...
- 在 C/C++ 中,不同的数据类型之间可以相互转换。无需用户指明如何转换的称为自动类型转换(隐式类型转换),需要用户显式地指明如何转换的称为强制类型转换。自动类型转换示例: int a = 6; a = 7.5 + a;编译器对 7.5 是作为 double 类型处理的,在求解表达式时,先将 a 转换为 double 类型,然后与 7.5 相加,得到和为 13.5。在向整型变量 ... 在 C/C++ 中,不同的数据类型之间可以相互转换。无需用户指明如何转换的称为自动类型转换(隐式类型转换),需要用户显式地指明如何转换的称为强制类型转换。自动类型转换示例: int a = 6; a = 7.5 + a;编译器对 7.5 是作为 double 类型处理的,在求解表达式时,先将 a 转换为 double 类型,然后与 7.5 相加,得到和为 13.5。在向整型变量 ...
- 对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: class Base{ public: Base(): m_a(0), m_b(0){ } Base(int a, int b): m_a(a), m_b(b){ } private: int m_a; int m_b; }; ... 对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: class Base{ public: Base(): m_a(0), m_b(0){ } Base(int a, int b): m_a(a), m_b(b){ } private: int m_a; int m_b; }; ...
- 在《C++异常处理》一节中,我们讲到了 C++ 异常处理的流程,具体为:抛出(Throw)--> 检测(Try) --> 捕获(Catch)异常必须显式地抛出,才能被检测和捕获到;如果没有显式的抛出,即使有异常也检测不到。在 C++ 中,我们使用 throw 关键字来显式地抛出异常,它的用法为:throw exceptionData;exceptionData 是“异常数据”的意思,它可以包... 在《C++异常处理》一节中,我们讲到了 C++ 异常处理的流程,具体为:抛出(Throw)--> 检测(Try) --> 捕获(Catch)异常必须显式地抛出,才能被检测和捕获到;如果没有显式的抛出,即使有异常也检测不到。在 C++ 中,我们使用 throw 关键字来显式地抛出异常,它的用法为:throw exceptionData;exceptionData 是“异常数据”的意思,它可以包...
- 内存管理运算符 new、new[]、delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数。一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内存时才会重载。以成员函数的形式重载 new 运算符:void * className::operator new( size_t size ){ //TODO:}以全局函数的形式重载 ne... 内存管理运算符 new、new[]、delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数。一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内存时才会重载。以成员函数的形式重载 new 运算符:void * className::operator new( size_t size ){ //TODO:}以全局函数的形式重载 ne...
- 在C语言中动态内存分配是个非常重要的章节,今天我们就给大家详解讲解一下动态内存分配的4个函数,malloc free calloc realloc 这这个函数把这些掌握了,恭喜你就可以玩转动态内存分配了! 在C语言中动态内存分配是个非常重要的章节,今天我们就给大家详解讲解一下动态内存分配的4个函数,malloc free calloc realloc 这这个函数把这些掌握了,恭喜你就可以玩转动态内存分配了!
- 一.函数对象概念概念:·重载函数调用操作符的类,其对象常称为函数对象·函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数特点函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值;函数对象超出普通函数的概念,函数对象可以有自己的状态;函数对象可以作为参数传递;函数对象可以像普通函数一样被调用,并且可以接受参数和返回值。通过重载函... 一.函数对象概念概念:·重载函数调用操作符的类,其对象常称为函数对象·函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数特点函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值;函数对象超出普通函数的概念,函数对象可以有自己的状态;函数对象可以作为参数传递;函数对象可以像普通函数一样被调用,并且可以接受参数和返回值。通过重载函...
- 一.遍历常用算法 1.1for_each在 C++ 中,for_each 是一个算法函数,位于 <algorithm> 头文件中。它接受一个范围(容器或迭代器对)以及一个函数对象(函数指针、函数、lambda 表达式等),用于对范围内的每个元素执行指定的操作。(遍历容器,,执行指定函数)以下是 for_each 的函数原型:template<class InputIt, class Una... 一.遍历常用算法 1.1for_each在 C++ 中,for_each 是一个算法函数,位于 <algorithm> 头文件中。它接受一个范围(容器或迭代器对)以及一个函数对象(函数指针、函数、lambda 表达式等),用于对范围内的每个元素执行指定的操作。(遍历容器,,执行指定函数)以下是 for_each 的函数原型:template<class InputIt, class Una...
- 一.模板模板概念模板就是建立通用的模具,大大提高复用性 模板的特点:1.模板不可以直接使用,它只是一个框架2.模板的通用并不是万能的·C++另一种编程思想称为泛型编程,主要利用的技术就是模板。·C++提供两种模板机制:函数模板和类模板 二.函数模板函数模板作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。 2.1语法template<typenam... 一.模板模板概念模板就是建立通用的模具,大大提高复用性 模板的特点:1.模板不可以直接使用,它只是一个框架2.模板的通用并不是万能的·C++另一种编程思想称为泛型编程,主要利用的技术就是模板。·C++提供两种模板机制:函数模板和类模板 二.函数模板函数模板作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。 2.1语法template<typenam...
- 一篇文章让你拿捏结构体!结构体的使用可以说非常广泛了,但是关于使用结构体的注意事项也是非常的多,新手使用老是会出现各种各样的错误,今天博主就给大家万字解析一下结构体的注意事项! 一篇文章让你拿捏结构体!结构体的使用可以说非常广泛了,但是关于使用结构体的注意事项也是非常的多,新手使用老是会出现各种各样的错误,今天博主就给大家万字解析一下结构体的注意事项!
- 一.set 1.1set基本概念特点:所有元素在插入时,会自动排序,并且不能插入重复元素。本质:set/multiset属于关联式容器,底层是红黑树。set/multiset区别1.set不允许容器中有重复的元素2.multiset允许容器中有重复的元素 1.2set构造和赋值构造set容器:默认构造函数:std::set<Type> set_name;区间构造函数:std::set<Ty... 一.set 1.1set基本概念特点:所有元素在插入时,会自动排序,并且不能插入重复元素。本质:set/multiset属于关联式容器,底层是红黑树。set/multiset区别1.set不允许容器中有重复的元素2.multiset允许容器中有重复的元素 1.2set构造和赋值构造set容器:默认构造函数:std::set<Type> set_name;区间构造函数:std::set<Ty...
- 一.stack基本概念栈(Stack)是一种常见的线性数据结构,遵循后进先出(Last-In-First-Out,LIFO)的原则。类似于我们在现实生活中堆叠书本或盘子的方式,最后放入的元素最先被取出。在栈中,元素的插入操作(入栈)是在栈顶进行,而元素的删除操作(出栈)也是在栈顶进行。这使得栈成为一种适合于后续操作依赖于最近插入的元素的数据结构。栈通常具有以下两个基本操作:入栈(Push)... 一.stack基本概念栈(Stack)是一种常见的线性数据结构,遵循后进先出(Last-In-First-Out,LIFO)的原则。类似于我们在现实生活中堆叠书本或盘子的方式,最后放入的元素最先被取出。在栈中,元素的插入操作(入栈)是在栈顶进行,而元素的删除操作(出栈)也是在栈顶进行。这使得栈成为一种适合于后续操作依赖于最近插入的元素的数据结构。栈通常具有以下两个基本操作:入栈(Push)...
上滑加载中
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢
2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考
2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本
2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签