C/C++
文章平均质量分 56
C/C++ 笔记总结。
SongXJ--
这个作者很懒,什么都没留下…
展开
-
再学C++ | 理解 explicit 关键字的作用
时,它将禁止隐式类型转换。默认情况下,C++编译器允许使用构造函数进行隐式类型转换。例如,如果一个类有一个参数的构造函数,而在代码中使用了该类对象的参数,则编译器会自动调用该构造函数进行类型转换。,可以避免一些潜在的错误和歧义,提高代码的安全性和可读性。同时,显式地进行类型转换可以更清晰地表达意图,避免了隐式类型转换可能引发的不明确或错误的行为。是一个关键字,用于修饰类的构造函数。类型的构造函数,编译器会自动进行隐式类型转换,将。对象作为参数,但是在调用函数时直接传递了一个。然而,如果将构造函数声明为。原创 2023-09-28 10:43:31 · 325 阅读 · 0 评论 -
再学C++ | std::set 的原理
需要在插入到时候排序,所以需要重载 struct 的比较运算符,这个时候就出现问题了,首先我们定义一个结构体。利用红黑树的特性来实现有序的插入、查找和删除操作,并且具有较好的平均和最坏情况下的时间复杂度。)将新元素插入到红黑树的适当位置,以保持树的有序性质。)使用红黑树的性质,通过比较函数在树中进行二分查找,查找操作的平均时间复杂度为。p1、p2,在 p1原创 2023-09-27 14:32:33 · 611 阅读 · 0 评论 -
C/C++:struct 和 class 的区别
汇总struct 是值类型,class 是对象类型struct 默认的访问权限是 public,而class 默认的访问权限是 private.struct 总是有默认的构造函数,即使是重载默认构造函数仍然会保留。这是因为 struct 的构造函数是由编译器自动生成的,但是如果重载构造函数,必需对 struct 中的变量全部初始化。并且 struct 的用途是那些描述轻量级的对象,例如 Line,Point 等,并且效率比较高。class 在没有重载构造函数时有默认的无参数构造函数,但是一被重载些默原创 2021-07-08 09:03:34 · 354 阅读 · 0 评论 -
C语言:实现面向对象和封装
今天的Windows应用开发课上,老师让我们用纯C语言实现面向对象的开发和封装。如果用C++那实现面向对象轻而易举,但是用纯C的话,光一个字符串的操作就搞了半天,和C++比起来,C语言真的太“基础”了,几乎所有的方法都要自己写。这个代码我硬钢了两天,一共写了500行左右,收获还是蛮大的,算是比较完善的将方法封装了起来。代码要求用纯C实现面向对象编程包含基类和一层子类,子类由用户自己设定,但...原创 2020-03-17 23:32:50 · 2052 阅读 · 1 评论 -
Visual Studio 中使用万能头文件 #include "bits/stdc++.h"
进行各种练习赛后,看题解代码时经常会看到这么一个陌生的头文件 #include <bits/stdc++.h> ,这个头文件是一个C++万能头文件,里面包含了程序比赛中所有可能用到的头文件,例如 algorithm、string、vector、set 等等。现在网络上大部分 oj 网站的编译器都是可以识别 #include <bits/stdc++.h> 这个头文件的(例...原创 2020-03-04 09:29:33 · 16501 阅读 · 3 评论 -
ACM小技巧——一句话秒杀PI的值
今天在“努力的老周”的博文中 get 到了一个新方法,可以快速准确的表示出 π 的值,感谢努力的老周,再也不用每次比赛傻傻的把一串 π 打印在纸上带入考场了。#include<cmath>const double PI = acos(-1.0);...转载 2020-03-05 14:34:59 · 713 阅读 · 0 评论 -
汉诺塔问题——“分步和”的规律(一种全新的理解)
汉诺塔是一个经典问题,相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置n个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。这是一个经典的递归算法,相...原创 2020-02-08 20:03:24 · 4798 阅读 · 0 评论 -
ACM知识点——位运算下的快速幂
如果你对 pow(2,3)的理解还停留在3个2相乘,那就太low了,其实对幂运算还有一种更快,更简洁的算法——快速幂。其实快速幂的本质原理非常简单,我们已知 24求28,不就是 24 * 24嘛,快速幂就是这个原理。那么现在你可能会问,如果是奇数次幂该怎么办?29就可以用 2 * 28来计算嘛。所以总结如下:当b是奇数时,那么有 a^b = a * a^*(b-1)当b是偶数时,...原创 2020-02-07 11:05:39 · 1012 阅读 · 1 评论 -
ACM知识点——常用的输入输出方式
【本文以C++代码为主要例子】基本输入输出1.输入已知n组数据//Cscanf("%d", &n);while (n--) { scanf("%d %d", &a, &b); printf("%d %d\n", a, b); }//C++ cin >> n;while (n--) { cin >> a >> b; cout...转载 2020-02-06 10:04:07 · 903 阅读 · 0 评论 -
C++:八皇后问题
大体思路首先定义一个8*8的二维矩阵,所有的元素都为0,然后开始调用回溯函数寻找皇后。BackTrack函数是一个回溯函数,回溯的终止条件为计数变量n为8,即皇后放到了最后一行。如果n不等于8,则循环放尝试每一列,如果可以放则将这个位置标记为1,然后继续向下一行查找,直到找完所有8行。找完后回溯依次往回跳出,并把之前找的皇后记录消除抹掉,即将其再次赋值为0,然后再寻找下一位置。Judge判...原创 2020-01-13 16:39:54 · 1277 阅读 · 0 评论 -
二叉查找树BinSearchTree:树高的计算
大致思路首先定义了计算树高的迭代函数getHeightRec(),它的参数是当前节点,函数从根节点进入,判断不是叶子节点后计算其左子树和右子树的树高,并返回其中高的那一个并加一(当前节点的一个树高),如此迭代,直到迭代到叶子节点后按顺序返回,最后输出树高。部分代码//计算树高的迭代函数template<typename T>int BinSearchTree<T>...原创 2020-01-13 16:17:41 · 1892 阅读 · 0 评论 -
二叉查找树BinSearchTree:实验验证节点数与树高呈对数关系
大致思路首先创建写入文件流用于储存节点数和其对应的树高,便于后期分析。在这里模拟了1个节点到800个节点的二叉树,每种情况都随机生成了200种情况进行计算平均树高。为了加大随机性,将随机数的最大值提高到了10000。生成的数据通过Excel数据分析功能进行对数函数拟合,通过拟合优度R2得出二叉树的树高是否与节点数成对数关系。部分代码int main(){ ofstream out; ...原创 2020-01-13 16:08:24 · 940 阅读 · 0 评论 -
二叉查找树BinSearchTree:命令行打印二叉树
首先定义了打印树的迭代函数printTreeRec (),它的参数是当前节点,函数从根节点进入,判断不是叶子节点后打印其左孩子和右孩子,如此迭代,直到迭代到叶子节点。在打印过程中为了格式化,整体上分了四类节点:分类1:是分类2的一种特殊情况,这是根节点没有右孩子的情况,无法调用它的父母,所以先单独判断;分类2:右孩子链的结尾换行,此情况为了避免与左子树根节点的打印重合,又加入条件必须是是...原创 2020-01-13 15:52:05 · 1518 阅读 · 0 评论 -
C++:汉诺塔问题
汉诺塔问题#include <iostream>#include <cstdio>using namespace std;int cnt;void move(int id, char from, char to) // 打印移动方式:编号,从哪个盘子移动到哪个盘子{ printf("step %d: move %d from %c->%c\n", +...原创 2020-01-05 18:27:20 · 454 阅读 · 0 评论