C++
文章平均质量分 59
C++ 入门到提高,图文并茂超详解。包括C++基础入门语法、C++面向对象核心编程(继承、封装、多态)、C++高级部分泛型编程及STL模板
R-G-B
计算机硕士,机器视觉、图像处理
展开
-
【C++】 switch 语句case后面可以跟 string变量吗? case后面可以怎么跟 string变量?
如果想在 switch 语句中匹配字符串,可以将字符串转换为整数或者使用其他方法来实现。一种常见的方法是使用 std::unordered_map 或 std::map 来将字符串映射到整数,然后在 switch 语句中使用整数进行匹配。在上述示例中,我们将字符串映射到整数,然后在 switch 语句中使用整数进行匹配。在 C++ 中,case 语句通常是用于 switch 语句中,用来匹配整数或枚举类型的常量。在标准的 C++ 中,,因为 case 语句。不能直接跟字符串变量。原创 2024-03-27 20:02:35 · 503 阅读 · 0 评论 -
c++ vector 赋值 只能用push_back()赋值 ?使用下标赋值出错,不能使用标赋值吗?
res中将包含8个元素,每个元素进行缺省的值初始化,对于int,也就是被赋值为0,因此res被初始化为包含8个0。移动赋值通过std::move函数实现,可以在不复制元素的情况下将一个vector转移到另一个vector中。此时vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,迭代器赋值方式使用assign函数实现,可以实现指定范围的元素插入、赋值等操作。原创 2024-01-24 11:23:27 · 1173 阅读 · 0 评论 -
c/c++printf输出指定宽度,位数不够用0补齐
【代码】c/c++printf输出指定宽度,位数不够用0补齐。转载 2023-11-18 11:21:40 · 887 阅读 · 0 评论 -
C++中将数字转换成string的方法汇总
这些方法中,std::to_string() 是最常用和最推荐的方法,因为它简单、安全,且不涉及手动分配缓冲区。然而,根据具体的需求,选择适当的方法是很重要的。如果需要更高级的格式化或其他操作,可能需要使用其他方法。使用C++标准库中的 std::to_string() 函数,可以将整数、浮点数以及其他数字类型转换为字符串,如前面的示例所示。使用C库函数 sprintf 可以将数字格式化为字符串。转载 2023-11-15 20:09:42 · 2999 阅读 · 0 评论 -
C++ vector中capacity()和size() 的区别
size是指容器当前拥有元素的个数,capacity是指容器在必须分配新的存储空间之前可以存放的元素总数。原创 2023-11-14 16:27:25 · 358 阅读 · 0 评论 -
多字节与宽字节
Unicode固然统一了编码方式,但是它的效率不高,比如UCS-4(Unicode的标准之一)规定用4个字节存储一个符号,那么每个英文字母前都必然有三个字节是0,这对存储和传输来说都很耗资源。Unicode固然统一了编码方式,但是它的效率不高,比如UCS-4(Unicode的标准之一)规定用4个字节存储一个符号,那么每个英文字母前都必然有三个字节是0,这对存储和传输来说都很耗资源。一个很大的缺点是,同一个编码值,在不同的编码体系里代表着不同的字。Unicode称为统一码或万国码,统一了不同国家的字符编码。转载 2023-11-07 21:41:01 · 86 阅读 · 0 评论 -
LPVOID 一个没有类型的指针
如果要调用段外的变量或函数就要声明成far远指针,典型的用法就是调用DLL的远堆变量,它是“远”的。far和near在现在Win32平台下没什么关系了 因为现在内存寻址是flat模式, 也就是平坦的4GB寻址.LPVOID是一个没有类型的指针,也就是说你可以将任意类型的指针赋值给LPVOID类型的变量(一般作为传递),然后在使用的时候再转换回来。可以将其理解为long型的指针,指向void型。void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。转载 2023-10-26 15:43:19 · 259 阅读 · 0 评论 -
cin.getline() 函数用法
cin.getline()函数的完整形式有三个参数。原创 2023-10-21 19:59:00 · 481 阅读 · 0 评论 -
str.c_str() 生成const char* 指针常量(一个指向常量的指针) 补充C中没有string类型的问题,
c最后指向的内容是垃圾,因为s对象被析构,其内容被处理,同时,编译器也将报错——将一个const char 赋与一个char。通过观察不难发现,c_str()是一个指针(实际上是一个临时指针),指向一个字符串数组,里面装载一个字符串。c_str()方法是返回一个C语言字符串的指针常量(即可读不可改变),内容与调用此方法的原字符串相同。需要注意的是此指针是一个由const修饰的常量指针,其值不可改变,只能读取。str.c_str() 补充C中没有string类型的问题。原创 2023-10-21 19:36:18 · 167 阅读 · 0 评论 -
C/C++ 数据类型 占用大小 有符号(char int flaoat double )、无符号(uchar uint ulong)、指针型、wchar_t、size_t、ptrdiff_t
常用数据类型 占用大小 有符号(char int flaoat double )、无符号(uchar uint ulong)、指针型、wchar_t、size_t、ptrdiff_t原创 2023-09-20 10:28:54 · 138 阅读 · 0 评论 -
a元钱去买啤酒,单价1元/瓶,假如b个瓶子可以换一瓶啤酒,编写一个计算最多可以喝多少瓶酒的函数
//a元钱去买啤酒,啤酒一元一瓶,假如b个瓶子可以换一瓶啤酒,编写一个计算最多可以喝多少瓶酒的函数//a>b//int maxBeers(int a ,int b)int maxBeers(int a ,int b){ int drinkNum = a;//第一次买啤酒数量 int emptyBottles = a;//第一次喝掉后空瓶数量 //空瓶换回来的啤酒 while (emptyBottles >= b) //换到的啤酒越来越少,最后空瓶<b,无法再换 {原创 2021-03-20 20:29:50 · 35 阅读 · 0 评论 -
十进制数,转二进制
代码】十进制数,转二进制。原创 2022-07-20 12:19:53 · 21 阅读 · 0 评论 -
ListNode* res = new ListNode(-1);初始化一个节点值为-1的空节点
ListNodelist=newListNode(0)初始化一个节点值为0的空节点,最常用最正规写法。ListNodelist=newListNode()初始化一个空节点,无值,不提倡此种写法。ListNodelist=null为空,什么都没有,一般不这么写。原创 2022-07-20 20:35:39 · 465 阅读 · 0 评论 -
删除链表的倒数第 n 个节点并返回链表的头指针
数据范围链表长度0\len\le10000≤n≤1000,链表中任意节点的值满足0\leval\le1000≤val≤100。给出的链表为1\to2\to3\to4\to51→2→3→4→5,n=2n=2.删除了链表的倒数第nn个节点之后,链表变为1\to2\to3\to51→2→3→5.要求空间复杂度O(1)O(1),时间复杂度O(n)O(n)给定一个链表,删除链表的倒数第n个节点并返回链表的头指针。这个里可以改进,不用pre。...原创 2022-07-23 11:59:26 · 135 阅读 · 0 评论 -
BM58 字符串的排列
例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。输入一个长度为n字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。返回值[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]输入一个字符串,长度不超过10,字符只包括大小写字母。返回值[“aab”,“aba”,“baa”]说明返回[“ba”,“ab”]也是正确的。返回值[“ab”,“ba”]空间复杂度O(1),原地交换。...原创 2022-07-28 18:01:35 · 25 阅读 · 0 评论 -
BM57 岛屿数量
时间复杂度O(nm)O(nm)O(nm),其中mmm、nnn为矩阵的长和宽,需要遍历整个矩阵,每次dfs搜索需要经过每个值为1的元素,但是最坏情况下也只是将整个矩阵变成0,因此相当于最坏遍历矩阵2次。输入[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]给一个01矩阵,1代表是陆地,0代表海洋,如果两个1相邻,那么这两个1属于同一个岛。(注存储的01数据其实是字符’0’,‘1’)输入[[1,1],[1,1]]...原创 2022-07-28 18:13:20 · 136 阅读 · 0 评论 -
时间复杂度、空间复杂度
第一个O(1)复杂度,没有递归,没有开辟任何连续的空间,只是定义考了一些变量被,常数级httpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttps。原创 2022-07-30 10:48:05 · 17 阅读 · 0 评论 -
BM84 最长公共前缀
给你一个大小为n的字符串数组strs,其中包含n个字符串,编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。数据范围0≤n≤5000,0原创 2022-07-31 11:06:14 · 39 阅读 · 0 评论 -
BM85 验证IP地址
string::find()函数:是一个字符或字符串查找函数,该函数有唯一的返回类型,即string::size_type,即一个无符号整形类型,可能是整数也可能是长整数。如果查找成功,返回按照查找规则找到的第一个字符或者子串的位置;string::npos参数 —— npos 是一个常数,用来表示不存在的位置;//如果字符串不存在包含关系,那么返回值就一定是npos}else{}str.find(“字符串”) 返回值是字符在母串s中的下标位置;...原创 2022-08-03 10:03:08 · 39 阅读 · 0 评论 -
substr(string ,pos,len)和s.substr(pos,len)区别
若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾。pos的默认值是0,len的默认值是s.size() - pos,即不加参数会默认拷贝整个s。substr(string ,pos,len)是sql函数,第一个位置下标是1,而不是0,pos从1开始;s.substr(pos,len)是C++函数,第一个位置下标是0,pos从0开始;1、SUBSTR(str,pos,len): 从pos开始的位置,截取len个字符。s2是sql用法:012;...原创 2022-08-08 13:16:58 · 94 阅读 · 0 评论 -
BM97 旋转数组
一个数组A中存有 n 个整数,在不允许使用另外数组的前提下,将每个整数循环向右移 M( M >=0)个位置,即将A中的数据由(A0 A1 ……时间复杂度:O(n)O(n)O(n),三次reverse函数的复杂度都最坏为O(n)O(n)O(n)时间复杂度:O(n)O(n)O(n),三次reverse函数的复杂度都最坏为O(n)O(n)O(n)空间复杂度:O(1)O(1)O(1),没有使用额外的辅助空间。空间复杂度:O(1)O(1)O(1),没有使用额外的辅助空间。输入:6,2,[1,2,3,4,5,6]...原创 2022-08-12 18:28:08 · 21 阅读 · 0 评论 -
矩阵转置、逆置
注意,下三角与上三角交换;而不是整个矩阵交换。原创 2022-08-13 09:05:01 · 228 阅读 · 0 评论 -
冒泡排序 T=O(n^2),S=O(1)
j–) //从前向后比较,将最大的移动到最后面,后面逐渐有序,每趟比较n-1-i-1次。i < n - 1;i++) //n个数,需n-1趟冒泡。//j =n-1 从后向前比,最小值向前移。创建单链表,无头结点。创建单链表,有头结点。..............................原创 2022-08-13 17:37:51 · 21 阅读 · 0 评论 -
BM14 链表的奇偶重排
/双指针形成奇、偶链,最后在连接在一起//奇数指针//偶数指针//偶数链表头指针}}时间复杂度:O(n),遍历一次链表的所有节点空间复杂度:O(1),常数级指针,无额外辅助空间。原创 2022-08-14 11:10:31 · 25 阅读 · 0 评论 -
归并排序 (BM20 数组中的逆序对)
如果3 > 1, 显然3后面的所有数都是大于1, 这里为 4 > 1, 明白其中的奥秘了吧。左区间arr[0]及以后的元素都可以和右区间的arr[2]逆序对,即左区间和右区间的元素arr[2]可以构成(mid-i+1)个逆序对。那么逆序数为(4,1),(4,2),(3,1),(3,2),同样的如果区间变为有序,比如[3,4] 和 [1,2]的结果是一样的,也就是说区间有序和无序结果是一样的。当然,如果区间有序,比如[3,4] 和 [1,2]输入:[1,2,3,4,5,6,7,0]输入:[1,2,3]....原创 2022-08-15 14:15:36 · 42 阅读 · 0 评论 -
BM22 比较版本号
因为"1.1"的版本号相当于"1.1.0",第3位修订号的下标为0,小于1。version1 中下标为 0 的修订号是 “1”,version2 中下标为 0 的修订号是 “2”。因为"1.1"的版本号相当于"1.1.0",第3位修订号的下标为0,小于1,所以version1 < version2,返回-1。修订号从左到右编号,下标从0开始,最左边的修订号下标为0,下一个修订号下标为1,以此类推。说明:version2忽略前导0,为"1.1",和version相同,返回0。输入:“1.1”,“1.01”..原创 2022-08-15 20:34:07 · 38 阅读 · 0 评论 -
递归return会停止吗
第二次次return f(4);第一次return f(2);第三次return f(7);此时满足if条件,返回n;下面在递归里加了输出语句;原创 2022-08-16 22:57:40 · 397 阅读 · 0 评论 -
#define 宏定义的用法 易错题
这一段代码的意思是说:sqr(x)的意思就是x的平方,而以后出现的sqr(x)就用(x) * (x)替换。宏定义在编译时会替换程序中的内容,是直接替换,不改变优先级。原创 2022-08-16 23:13:53 · 447 阅读 · 0 评论 -
二叉树的遍历(前序、中序、后序、层次)
定义树的结构体。原创 2022-08-17 11:45:46 · 24 阅读 · 0 评论 -
BM28 二叉树的最大深度
step 1:对于每个节点,若是不为空才能累计一次深度,若是为空,返回深度为0.空间复杂度:O(n),最坏情况下,二叉树化为链表,递归栈深度最大为n;时间复杂度:O(n),其中nnn为二叉树的节点数,遍历整棵二叉树;时间复杂度:O(n),其中n为二叉树的节点数,遍历整棵二叉树;step 3:当前深度为两个子树深度较大值再加1。step 2:递归分别计算左子树与右子树的深度。空间复杂度:O(n),辅助队列的空间最坏为n;...原创 2022-08-17 15:02:42 · 28 阅读 · 0 评论 -
BM34 判断是不是二叉搜索树
给定一个二叉树根节点,请你判断这棵树是不是二叉搜索树。二叉搜索树满足每个节点的左子树上的所有节点均严格小于当前节点且右子树上的所有节点均严格大于当前节点。思路:二叉搜索树,中序遍历是升序;只要当前结点值小于pre,就不是升序,就不是二叉搜索树;原创 2022-08-20 11:33:16 · 27 阅读 · 0 评论 -
快速排序 QuickSort ,T= O(nlogn),S=O(logn)
推荐使用,代码好写,不易错)假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。序列的一个数作为基准数。选取第一个数6作为基准数。我们的目标是将6挪到序列中间的某个位置,假设这个位置是k。现在就需要寻找这个k,并且以第k位为分界点,左边的数都小于等于6,右边的数都大于等于6。类似下面这种排列:3 1 2 5 49 7 10 8。原创 2022-08-22 17:52:22 · 25 阅读 · 0 评论 -
BM67 不同路径的数目(一)
时间复杂度:O(mn),其中m、n分别为矩阵的两边长,递归过程对于每个m最多都要经过每一种nnn。//不同走法路径在于往下和往右的组合情况,即在一堆往下和往右的序列中,每种排列的情况;//选择n−1个位置作为往右,即不同的走法有{m+n−2,n−1}=(m+n-2)空间复杂度:O(m+n),递归栈的最大深度为矩阵两边从m、n都到了1。//从矩阵左上角走到右下角,共需往下走m−1步,往右走n−1步,//序列一共有(m-1)+(n-1) = m+n−2个位置,时间复杂度:O(n),计算过程需要从1遍历到n。..原创 2022-08-26 11:11:08 · 46 阅读 · 0 评论 -
BM70 兑换零钱(一)
①当前面值1元,还要凑齐剩下 5-1 = 4 元,图右表可知,凑齐4元最少需2枚硬币;②当前面值2元,还要凑齐剩下 5-2 = 3 元,图右表可知,凑齐3元最少需1枚硬币;③当前面值3元,还要凑齐剩下 5-3 = 2 元,图右表可知,凑齐2元最少需1枚硬币;即,dp[ i ] = 1 + dp[i - arr[0]],即上一状态解 +1;即,dp[ i ] = 1 + dp[i - arr[1]],即上一状态解 +1。即,dp[ i ] = 1 + dp[i - arr[1]],即上一状态解 +1。...原创 2022-08-26 17:04:06 · 52 阅读 · 0 评论 -
C/C++ 二进制,八进制,十六进制输出格式 及转换
或者To disable deprecation, use _CRT_SECURE_NO_WARNINGS.在vs2022,VS2019里报错,不安全,使用_itoa()函数替代itoa。解决方法2:添加宏定义 _CRT_SECURE_NO_WARNINGS。关于itoa(num, s, 2);解决方法1:使用_itoa_s替代_itoa。结果还是报错,提示使用_itoa_s替代。根据提示使用_itoa()函数。原创 2022-09-06 00:25:33 · 1990 阅读 · 0 评论 -
函数指针示例
【代码】函数指针示例。原创 2022-09-27 13:17:02 · 21 阅读 · 0 评论 -
枚举 enum
【代码】枚举 enum。原创 2022-09-28 20:41:40 · 23 阅读 · 0 评论 -
sizeof()与strlen() 不相等
未初始化的情况下,用strlen是不可行的,因为strlen的唯一标准是找‘\0’,记住这个就能明确strlen会执行处什么值;初始化与否sizeof()的结果不变,但是反应的并非真实字符串长度而是所占空间大小,所以memset初始化的时候用sizeof较好char* 类型应特别注意,sizeof()计算出来的是指针大小,32位系统4字节,64位占8字节,与char*的字符串毫无关系,只有char[N]字符数组使用sizeof ()计算大小,原创 2022-09-03 22:29:00 · 32 阅读 · 0 评论 -
C++STL库常用库函数总结
9.unordered_set, unordered_map, unordered_multiset, unordered_multimap, 哈希表。8.set, map, multiset, multimap, 基于平衡二叉树(红黑树),动态维护有序序列。5.priority_queue, 优先队列,默认是大根堆。1.vector, 变长数组,倍增的思想。7.deque, 双端队列。10.bitset, 圧位。3.string,字符串。4.queue, 队列。6.stack, 栈。原创 2023-07-08 17:56:00 · 194 阅读 · 0 评论 -
C语言 常用库函数-表
调用数学函数时,要求在源文件中包下以下命令行:#include 调用字符函数时,要求在源文件中包下以下命令行:#include 调用字符函数时,要求在源文件中包下以下命令行:#include 调用字符函数时,要求在源文件中包下以下命令行:#include 调用字符函数时,要求在源文件中包下以下命令行:原创 2023-07-08 17:47:39 · 292 阅读 · 0 评论