![](https://img-blog.csdnimg.cn/20210303165402241.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++基础
文章平均质量分 67
C++基础
呆萌宝儿姐
CSDN专家博主、阿里云开发者社区专家博主、51CTO社区专家博主、360书馆认证博主、知乎掘金B站等平台受邀作者。
如遇开发、程序等需求,博客首页下拉加入公众号,私信博主
展开
-
C/C++小案例:汉语自动分词器
文章目录成果一、模型设计1.1 汉语自动分词:1.1.1 基本理论:1.1.2 算法基本思想:1.1.3 算法评价:二、系统设计2.1 汉语自动分词:2.1.1 数据结构:2.1.2 算法实现:2.1.3 算法评估:三、开发环境四、源码成果一、模型设计1.1 汉语自动分词:1.1.1 基本理论:词是自然语言中能够独立运用的最小单位,是自然语言处理的基本单位。自动词法分析就是利用计算机对自然语言的形态 (morphology) 进行分析,判断词的结构和类别等。词性或称词类(Part-of-Spee原创 2021-12-17 10:36:33 · 4395 阅读 · 2 评论 -
用C/C++自己写一个宋词生成器,气质一下子就上来了呀
文章目录成果一、系统设计1.1 词频统计:1.1.1 基本理论:1.1.2 算法基本思想:1.1.3 算法评价:1.2 宋词生成1.2.1 生成规则定义1.2.2 生成宋词二、系统设计2.1 词频统计:2.1.1 数据结构:2.2.2 算法实现:2.2.3 算法评估:三、系统演示四、开发环境五、源码成果先看一下我自动生成的宋词一、系统设计1.1 词频统计:1.1.1 基本理论: 利用计算机统计宋词中汉字出现的频率,并通过对大量语料的学习,利用宋词自身的特性,在经过大量语料学习后,使用在原创 2021-12-16 18:10:33 · 5876 阅读 · 0 评论 -
C/C++ bind函数应用详解
文章目录知识前导头文件bind介绍bind函数:bind简述:placeholders用法探究单个参数多个参数成员函数知识前导头文件#include <functional>bind介绍bind函数:使用规则:auto newCallable = bind(callable, arg_list);bind简述:bind函数看做一个通用的函数适配器,它接受一个可调用对象callable,生成一个新的可调用对象newCallable。它可以把原可调用对象callable的某些原创 2021-12-16 09:07:37 · 3471 阅读 · 2 评论 -
C++ c_str() 函数应用
函数作用为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。函数语法:const char *c_str();返回值c_str()函数返回一个指向正规C字符串的指针常量(临时指针), 内容与本string串相同。使用注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针比如:最好不要这样:char* c; string s="1234"; c = s.c_str();原创 2021-11-15 19:11:10 · 2221 阅读 · 0 评论 -
C/C++ 改变控制台输文字颜色:SetConsoleTextAttribute()
文章目录简介头文件函数原型参数案例:变色输出简介SetConsoleTextAttribute()函数是一个API设置字体颜色和背景色的函数。参数表中使用两个属性(属性之间用,隔开)。头文件#include<Windows.h>函数原型BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput, WORD wAttributes);参数第一个属性获得句柄(即要设置颜色的地方),常用GetStdHandle()获得句柄。Ge原创 2021-11-14 12:13:41 · 3486 阅读 · 3 评论 -
C++11 static_assert关键字
文章目录static_assert简介static_assert语法:参数描述:static_assert作用:注意事项代码案例检查模板参数示例static_assert简介我们知道,C++现有的标准中就有assert、#error两个方法是用来检查错误的,除此而外还有一些第三方的静态断言实现。assert是运行期断言,它用来发现运行期间的错误,不能提前到编译期发现错误,也不具有强制性,也谈不上改善编译信息的可读性。既然是运行期检查,对性能肯定是有影响的,所以经常在发行版本中,assert都会被关掉原创 2021-11-12 23:41:35 · 1884 阅读 · 0 评论 -
C++中string类 size() length()函数的返回值问题
C++中string类size() length()函数的返回值是无符号数C++中string类size() length()函数的返回值是无符号数C++中string类size() length()函数的返回值是无符号数重要的事说三遍起因今天做了一道LeetCode,这一下子给我整不会了class Solution {public: string truncateSentence(string s, int k) { int end=-1; whil原创 2021-09-12 10:10:42 · 5025 阅读 · 6 评论 -
有符号数与无符号数之间运算问题探究
文章目录有符号数与无符号数之间运算问题例子:问题探究:unsigned int变量跟int类型的变量运算时得出的结果是什么类型的?逐步思考:代码分析:问题总结例:1:例2:无符号和有符号两个数比较时,会默认转成无符号数,再进行比较。有符号数与无符号数之间运算问题这个问题测试是否懂得C语言中的整数自动转换原则,有些开发者懂得极少这些东西。当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此,从这个意义上讲,无符号数的运算优先级要高于有符号数,这一点对于应当频繁用到无符号数据类型原创 2021-09-12 10:10:18 · 5163 阅读 · 5 评论 -
各类数值型数据间的混合运算
文章目录整型、实型、字符型数据间可以混合运算1.自动转换1.1.运算转换规则:例如:2.强制转换2.1.例如整型、实型、字符型数据间可以混合运算1.自动转换发生自动转换的情况:运算转换------不同类型数据混合运算时赋值转换------把一个值赋给与其类型不同的变量时输出转换------输出时转换成指定的输出格式函数调用转换------实参与形参类型不一致时转换1.1.运算转换规则:不同类型数据运算时先自动转换成同一类型具体规则如下图所示:例如:char ch原创 2021-09-12 08:57:46 · 4394 阅读 · 0 评论 -
C++ 高校图书管理系统
文章目录main.cppBook.hReader.hLogin.hmain.cpp// Books_Management_System__BMS.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。/********************************************************************* *Target:高校图书馆管理系统的实现 *Author:杨永利 *Date:2019.12.27 *1、2019.12.27原创 2021-08-29 08:06:38 · 3215 阅读 · 2 评论 -
C++ 继承与派生中的赋值兼容规则问题探究
文章目录问题解决问题继承与派生中的赋值兼容规则第一个输出理解:代码1示例代码1解析:父类类型的指针可以指向子类对象第二个输出理解:代码2示例第三个输出理解:问题前两天大徒弟问我这个题,问输出啥。我当时手头有事说让他打打运行一遍不就行了嘛,现在再回过头来看这个题我觉得有必要写一篇整理一下。解决问题实在不会了,就把程序打出来,运行一下试试,比对结果与程序去研究,大家可以先复制运行一下。#include<iostream>#include<string.h>#include原创 2021-06-01 22:48:07 · 2627 阅读 · 2 评论 -
谁说程序员不浪漫——给女友放个烟花,安排!安排!
文章目录效果图(有背景音乐呦)项目链接搞起来编译环境:vs2017 & EasyX代码效果图(有背景音乐呦)项目链接https://download.csdn.net/download/weixin_45525272/18558896搞起来编译环境:vs2017 & EasyX没有EasyX的小伙伴可以点击下面网盘链接进行下载安装,点击exe运行,选择你对应的vs版本点击安装即可链接:https://pan.baidu.com/s/1pQbktxBd9u2gObg84eGR原创 2021-05-10 20:04:30 · 2969 阅读 · 1 评论 -
const char*类型的值不能用于初始化char*类型的实体
VS2017项目出现"const char *" 类型的实参与 “char *” 类型的形参不兼容错误的解决方法解决方案一在VS2017 中依次点击项目(或者右键解决方案中的项目,点击属性)->属性->C/C+±>语言->符合模式,将原来的“是”改为“否”即可。解决方案二在声明变量 char* 时改成 const char *即可...原创 2021-04-11 10:08:57 · 5848 阅读 · 2 评论 -
自己实现C++String类
简单String类功能实现一般是要求实现构造函数、拷贝构造函数、赋值函数、析构函数这几个非常重要的部分。因为String里涉及动态内存的管理,默认的拷贝构造函数在运行时只会进行浅复制,即只复制内存区域的指针,会造成两个对象指向同一块内存区域的现象。如果一个对象销毁或改变了该内存区域,会造成另一个对象运行或者逻辑上出错。这时就要求程序员自己实现这些函数进行深复制,即不止复制指针,需要连同内存的内容一起复制。具体代码如下:/******************Author : lijddata :原创 2021-04-01 07:32:03 · 5141 阅读 · 2 评论 -
C++ strtok函数详解
文章目录头文件函数原型参数返回值注意:使用案例拓展strtok_s与strtok_rstrtok_s函数strtok_r函数拓展用例:strtok函数的作用是把字符串以规定的字符分割开:头文件#include <string.h>函数原型char *strtok(char s[], const char *delim);参数str – 要被分解成一组小字符串的字符串。delim – 包含分隔符的 C 字符串。返回值该函数返回被分解的第一个子字符串,如果没有可检索的字符串原创 2021-02-27 10:51:50 · 15873 阅读 · 1 评论 -
std::accumulate的具体用法
文章目录std :: accumulate头文件原型参数返回值用例1用例2:lamda表达式std :: accumulate作用累加求和,对于字符串可以将其连接起来(string类型的加,相当于字符串连接)头文件#include <numeric>```原型accumulate (InputIterator first, InputIterator last, T init, BinaryOperation binary_op);参数first,last:将迭代器输入原创 2021-02-26 12:27:58 · 4808 阅读 · 1 评论 -
为何程序员喜欢将INF设置为0x3f3f3f3f?
在算法竞赛中,我们常常需要用到一个“无穷大”的值,对于我来说,大多数时间我会根据具体问题取一个99999999之类的数(显得很不专业啊!)在网上看别人代码的时候,经常会看到他们把INF设为0x7fffffff,奇怪为什么设一个这么奇怪的十六进制数,一查才知道,因为这是32-bit int的最大值。如果这个无穷大只用于一般的比较(比如求最小值时min变量的初值),那么0x7fffffff确实是一个完美的选择。但是更多情况下,0x7fffffff并不是一个好的选择,比如在最短路径算法中,我们使用松弛操作:转载 2021-02-25 19:35:14 · 293 阅读 · 1 评论 -
sync_with_stdio和cin.tie(0); cout.tie(0);
文章目录sync_with_stdiotieACM应用sync_with_stdio这个函数是一个“是否兼容stdio”的开关,C++为了兼容C,保证程序在使用了std::printf和std::cout的时候不发生混乱,将输出流绑到了一起。tietie是将两个stream绑定的函数,空参数的话返回当前的输出流指针。在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示NULL)来解除cin与cout的绑定原创 2021-02-25 08:08:00 · 17099 阅读 · 7 评论 -
c++数字和字符串的转换
文章目录1 利用stringstream数字转字符串字符串转数字2.利用 sprintf()函数和sscanf()函数sprintf() 用于将数字转化为字符串sscanf() 用于将字符串转化为数字1 利用stringstream数字转字符串头文件 #include#include <string>#include <sstream>int main(){ double a = 123.456; string res; stringstream s原创 2021-02-24 21:37:18 · 3905 阅读 · 2 评论 -
C++字符串分割
文章目录1. 自己实现split()2. stringstream3.istringstream4. getline() 实现 split()1. 自己实现split()void split(const char *s, vector<string> &strs, char delim = ' ') { if(s == nullptr) { return; } const char *head, *tail; head = tail原创 2021-02-24 21:27:32 · 4080 阅读 · 1 评论 -
C++急速赛车小游戏(注释几天后更新)
文章目录成品展示项目链接(带配图)源代码tools.hracingGame.cpp成品展示项目链接(带配图)源代码tools.h#ifndef _TOOLS_H_#define _TOOLS_H_#include<graphics.h>typedef unsigned long COLORREF;typedef unsigned char byte;typedef struct ARGB{ byte a; byte r; byte g; byte b;}ARGB原创 2021-01-27 21:30:24 · 5626 阅读 · 2 评论 -
C++ 中 ifstream读取txt文件内容
1.在一棵二叉搜索树上查找63,序列39、101、25、80、70、59、63是一种可能的查找时的结点值比较序列。 (3分) TF2.在一棵由包含4、5、6等等一系列整数结点构成的二叉搜索树中,如果结点4和6在树的同一层,那么可以断定结点5一定是结点4和6的父亲结点。 (3分) TF3.二叉搜索树的查找和折半查找的时间复杂度相同。 (2分) TF4.二叉搜索树的最小元素一定位于树根的左子树。 (2分) TF选择题 1.对二叉搜索树进行什么遍历可以得到从小到大的排序序列? (1分) 选项A原创 2020-11-14 10:32:19 · 31491 阅读 · 2 评论 -
C++基础——向上取整/向下取整
头文件#include<math.h>或者 #include<cmath>函数函数名称函数说明floor()不大于自变量的最大整数ceil()不小于自变量的最大整数round()四舍五入到最邻近的整数fix()朝零方向取整floor()会取不大于自变量的最大整数的ceil()会取不小于自变量的最大整数round()函数,才是我们需要的四舍五入的函数,因为它会返回离自变量最近的整数,这个返回的整数可能大于也可能小于原原创 2020-11-16 09:21:47 · 56744 阅读 · 6 评论 -
C++优先队列(priority_queue)用法详解
文章目录priority_queue优先队列介绍模板 参数priority_queue成员函数大顶堆与小顶堆大顶堆(降序)小顶堆(升序)注意事项代码案例priority_queue对于这个模板类priority_queue,它是STL所提供的一个非常有效的容器。作为队列的一个延伸,优先队列包含在头文件 <queue> 中。优先队列介绍优先队列是一种比较重要的数据结构,它是有二项队列编写而成的,可以以O(log n) 的效率查找一个队列中的最大值或者最小值,其中是最大值还是最小值是根据创原创 2020-11-16 09:11:37 · 8120 阅读 · 0 评论 -
C++学习——虚函数与纯虚函数
引言:若要访问派生类中相同名字的函数,必须将基类中的同名函数定义为 虚函数,这样,将不同的派生类对象的地址赋给基类的指针变量后, 就可以动态地根据这种赋值语句调用不同类中的函数。一、虚函数的定义和使用可以在程序运行时通过调用相同的函数名而实现不同功能的 函数称为虚函数。定义格式为:virtual FuncName();一旦把基类的成员函数定义为虚函数,由基类所派生出来的所 有派生类中,...原创 2020-02-12 17:03:30 · 8542 阅读 · 5 评论 -
32、64位数据类型占用字节以及内存对齐原理
文章目录32位编译器:32位系统下指针占用4字节64位编译器:64位系统下指针占用8字节内存对齐原理1.什么是内存对齐2.结构体内存对齐规则(请记住三条内存规则(在没有#pragam pack宏的情况下)32位编译器:32位系统下指针占用4字节 char :1个字节 char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器) short int : 2个字节 int: 4个字节 unsigned int : 4个字节 f原创 2020-09-05 19:25:17 · 8392 阅读 · 0 评论 -
C++学习——类和对象
一、类和对象基本知识:1、类的访问控制有哪些?公有成员:以关键字public指明。私有成员:以关键字private指明。保护成员:以关键字protected指明。2、拷贝构造函数的作用是什么?用一个已经存在的对象初始化本类的新对象。3、友元函数和友元类的作用是什么?友元提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行 数据共享的机制。对于一个类,可以利用关键字fri...原创 2020-02-12 16:42:13 · 3728 阅读 · 1 评论 -
C++面向对象程序设计简介
一、面向过程和面向对象的区别。面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为二、面向过程和面向对象的特征。面向过程是把过程作为编程的思路,如程序流程图,但是面向对象是把实体当作对象,如自行车是一个实体,就...原创 2020-02-12 16:38:41 · 3828 阅读 · 0 评论 -
C++关于参数是对象时要调用拷贝构造函数进行传参的问题探讨
文章目录值传递(调用拷贝构造函数)地址传递(不调用拷贝,直接对原对象进行修改)注意:调用拷贝构造的三种情况相关问题:1 、c++,类的对象作为形参时一定会调用复制构造函数吗?2 、如果类中没有定义复制构造函数 那对象就不能作为形参?对象也可以作为函数的参数传递给函数,其转递方法与传递其他类型的数据一样,可采用值传递和地址传递两种方法。值传递(调用拷贝构造函数)值传递:是把对象的拷贝而不是本身传递给函数,函数中对参数对象的任何修改都不会影响调用该函数的对象本身;地址传递(不调用拷贝,直接对原对象进行修原创 2020-07-25 18:30:24 · 7281 阅读 · 0 评论 -
在C++中 :: 的三种意思
"::"在C++中表示作用域,和所属关系。"::"是运算符中等级最高的,它分为i三种,分别如下:ps ::在最开头就是全局::在最开头开始,表示顶层命名空间(全局变量)std::string <==> ::std::string 这样也可以。::和 文件路径的 / 可以对照理解。(Linux系统下理解更加便捷,linux下面没有盘符之分, 只有一个盘)下面这俩其实是一样的/usr/share/a.txt a.txt 位于 /usr/share目录下/a原创 2020-07-21 10:23:32 · 22739 阅读 · 0 评论 -
C++栈对象,堆对象,静态对象的理解
栈对象的优势是在适当的时候自动生成,又在适当的时候自动销毁,不需要程序员操心;而且栈对象的创建速度一般较堆对象快,因为分配堆对象时,会调用operator new操作,operator new会采用某种内存空间搜索算法,而该搜索过程可能是很费时间的,产生栈对象则没有这么麻烦,它仅仅需要移动栈顶指针就可以了。但是要注意的是,通常栈空间容量比较小,一般是1MB~2MB,所以体积比较大的对象不适合在栈中分配。特别要注意递归函数中最好不要使用栈对象,因为随着递归调用深度的增加,所需的栈空间也会线性增加,当所需栈空原创 2020-06-19 22:25:49 · 4596 阅读 · 0 评论 -
Qt 5——Lambda表达式
C++11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。首先看一下Lambda表达式的基本构成:[capture](parameters) mutable ->return-type{statement}[函数对象参数] (操作符重载函数参数)mutable ->返回值{函数体}① 函数对象参数 [ ];[ ],标识一个Lambda的开始,这部分必须存在,不能省略。函数对象参数是传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使用那些到定义.原创 2020-06-19 15:50:53 · 4062 阅读 · 0 评论 -
函数调用约定:__stdcall、__cdecl和__fastcall介绍
想深入了解可学习汇编语言去了解内存机制一、问题引导:C语言中函数参数的入栈顺序C程序栈底为高地址,栈顶为低地址。C方式参数入栈顺序(从右至左)的好处就是可以动态变化参数个数。通过栈堆分析可知,自左向右的入栈方式,最前面的参数被压在栈底。除非知道参数个数,否则是无法通过栈指针的相对位移求得最左边的参数。这样就变成了左边参数的个数不确定,正好和动态参数个数的方向相反。因此,C语言函数参数采用自右向左的入栈顺序,主要原因是为了支持可变长参数形式。二、、函数调用约定(Calling Convention原创 2020-06-01 16:50:37 · 5620 阅读 · 1 评论 -
struct结构体里能放函数吗?
C语言C语言里面不能,在C语言里结构体是一种复合数据类型只能存放数据,不过可以定义一个指向函数的指针进行使用。C++(C++并发编程多体现)C++里可以在结构体内定义函数,用法和class定义类是一样的,说穿了struct 和 class用法相同,但要注意的一点是内,struct默认的是public类型,然而class默认的是private类型的。下面有一个C++结构体定义函数的小例子,大家可以试一试#include<iostream>#include<string>原创 2020-05-30 20:42:02 · 18052 阅读 · 2 评论 -
C++中函数名字前的&或*
文章目录一、&函数名称前面加引用符号“&”的意思是返回引用类型。&扩展资料二、*函数名称前面加指针符号“*”,代表它是函数指针。在C语言中这种形式为:接下来,对于C++来说一、&函数名称前面加引用符号“&”的意思是返回引用类型。格式:类型标识符 &函数名(形参列表及类型说明){ //函数体}。在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtim原创 2020-05-20 13:21:47 · 25594 阅读 · 8 评论 -
C++ list列表删除匹配元素(erase)
匹配中间一片元素进行删除#include <list>#include <iostream>#include <iterator>using namespace std;int main( ){ list<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; for (auto &i : c) { cout << i << " "; } cout原创 2020-05-11 09:17:41 · 6612 阅读 · 0 评论 -
c++11标准 类默认函数的控制:“=default“ 和 “=delete“函数
C++ 的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象。如果程序员没有显式地为一个类定义某个特殊成员函数,而又需要用到该特殊成员函数时,则编译器会隐式的为这个类生成一个默认的特殊成员函数。C++11 标准引入了一个新特性:"=default"函数。程序员只需在函数声明后加上“=defau...原创 2020-05-08 15:21:55 · 4142 阅读 · 1 评论 -
C++中的explicit详解
C++ explicit关键字详解首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用...原创 2020-05-08 14:43:16 · 32742 阅读 · 10 评论 -
C++中int int& int * int**的区别、联系和用途
1、int;int是C++关键字,表示整型,其大小是32位有符号整型,表示的范围是-2,147,483,648 到2,147,483,647;在声明和定义变量时使用,它表示的意思是所声明或所定义的变量为整型变量。如果其用于函数参数时,其传递方向为值传递,即只能将实参的值传递给形参,而不能将形参的值传递给实参。例如:通过这种方式去进行交换两个数是无法达到目的的。例子1:#include&...原创 2020-05-05 16:56:04 · 25153 阅读 · 4 评论 -
虚函数后面的const=0
const 和 =0要分开理解.首先理解一下分开的意思成员函数后面用 const 修饰,const表示this是一个指向常量的指针,即对象成为一个常量,即它的成员不能够变化.(默认情况下,this的类型是指向类类型非常量版本的常量指针。例如在Sales_data成员函数中,this的类型是Sales_data *const,即类一旦实例化一个对象后,this指向这个对象,是不能改变的,但是对象...原创 2020-04-29 15:29:27 · 8482 阅读 · 1 评论