C++
刘根生
蔡文姬没有文
展开
-
插入排序算法C++代码实现
插入排序过程如图所示代码:#include<iostream>#include<vector>using namespace std;void selectsort(vector<int> nums){ for(int i=1;i<nums.size();i++) { for(int j=i-1;j>=0;j--) { if(nums[j+1]<nums[j]) { int temp=nums[j].原创 2020-08-30 14:19:55 · 157 阅读 · 1 评论 -
c++中的引用
引用的特点(1)在引用的使用中,单纯给某个变量取个别名是毫无意义的,引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问题。(2)用引用传递函数的参数,能保证参数传递中不产生副本,提高传递的效率,且通过const的使用,保证了引用传递的安全性。(3)引用与指针的区别是,指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性...原创 2020-04-27 21:04:31 · 255 阅读 · 0 评论 -
我的秋招之路之c++中static的用法
c++的内存分布如上图所示。对于一个完整的程序,在内存中的分布情况如下图: 1.栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区。会随着作用于退出而释放空间。3.堆区:程序员分配并释放的区域,像malloc(c),new(c++)3.全局数据区(静态区):全局变量和静态便令的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的...原创 2020-04-27 16:37:32 · 172 阅读 · 0 评论 -
栈的应用(c++)
如果只了解栈的特点我们可能不知道栈的作用,在大学备考计算机二级C语言的时候,学习过栈和队列,当时只知道栈的特点是后进先出,队列的特点是先进先出。编程过程中并没有用过栈和队列,没有体会到算法的巧妙。上了研究生为了找工作开始刷leetcode的题目才体会到算法的巧妙。今天是在俄罗斯的第五个半月,也是我开始刷leetcode的第二遍,这一遍我决定记录我自己的刷题经验,以便后来复习,如果能帮助到大家,那更...原创 2020-03-16 04:11:42 · 412 阅读 · 0 评论 -
动态规划是真的难啊坚持
动态规划的思路,和官方题解的思路是一样的。在这里我说说我的思考过程。一开始我没有直接想到dp数组里的每个元素,代表“以该元素结尾的最长有效长度”,而是我把它定义成“到该元素为止前面字符串里最长有效长度”。比如说:( ( ) ( ( ( ( ) )index 0 1 2 3 4 5 6 7 8dp arr 0 0 2 2 2 2 2 2 ...转载 2020-02-13 20:14:00 · 991 阅读 · 0 评论 -
单向链表操作之删除倒数第n个结点
关键在于倒数第n个结点,如果让删除第几个结点还是很简单的。所以可以想办法将倒数第几个结点转换成正数的第几个结点,但是题目中并没有给出一共多少个数,所以不太好转化,我们可以利用双指针来操作。利用头指针和尾指针操作,先让尾指针移动到第n个结点处,然后再把头指针和此时的尾指针一块移到最后。这样,尾指针就统计了链表的长度。尾指针一共走了两端,第一端走了n个路程,第二段一共走了总数-n个路程,而此时头结点是...原创 2020-02-11 21:00:29 · 783 阅读 · 0 评论 -
三数之和
题目描述:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]整体思路利用C++#include<algorith...原创 2020-02-10 19:08:45 · 219 阅读 · 0 评论 -
整数转罗马数字C++代码实现
题目:罗马数字包含以下七种字符:I,V,X,L,C,D和M。例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大...原创 2020-02-09 02:53:56 · 1630 阅读 · 1 评论 -
短板效应C++代码实现
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/container-with-mos...原创 2020-02-08 20:49:35 · 286 阅读 · 0 评论 -
正则表达式匹配C++代码实现
正则表达式匹配的解决需要用到递归和动态规划的知识。递归和动态规划之间是有密切的联系的。动态规划的实质就是带有缓存区的递归。递归实现阶乘。#include <iostream>using namespace std; //计算阶乘的函数long CalcJiecheng(int num){ int res = 0; if (1== ...原创 2020-02-08 18:11:44 · 1176 阅读 · 0 评论 -
求最长回文子串
利用中心扩展法求最长回文子串算法复杂度为O()待改进:Manacher方法,Manacher 法将所有的字符串全部变成奇数个字符。思想:回文子串一定是个中心对称的图形,有的对称中心是一个字母比如abcba,有的是对称中心是两个字母比如abba。所以需要分开进行(程序中会有体现)。利用回文子串的这一特点我们可以假设回文子串的每一个子串都是对称中心,然后看看对称中心的左右是否是一样的,如果是一...原创 2020-02-05 20:50:13 · 104 阅读 · 0 评论 -
两数之和C++代码实现超详细讲解
题目描述:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位数字。例子输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807解题思路:两个数相加需要考虑到进位,涉及的知识点有结构体指针的运用和单...原创 2020-02-04 21:25:29 · 1623 阅读 · 0 评论 -
在家闲来无事不如编个21点游戏玩玩
#include<cstdlib>#include<iostream>#include<ctime>using namespace std;class ccard{ private: int napip[5]; int nnumber; int ndollar; int ngamble; int nwin; int nlos...原创 2020-02-04 17:23:06 · 228 阅读 · 0 评论 -
双向链表实现电话簿C++代码实现
双向链表实现电话簿主要涉及的知识点就是双向链表的创建,插入,删除操作,涉及到一小点的文件操作。双向链表的插入和删除操作根据删除头结点尾结点中间结点代码不同,其中头结点和尾结点稍许的麻烦因为插入删除都涉及到头指针和尾指针的重新赋值和连接。删除中间结点较为简单,设置一个临时结点指向要删除结点的前向指针前后连接即可。文件操作主要涉及文件的读取操作相对来说比较简单。最难理解的可能就是双向链表的操作。这一部...原创 2020-01-31 04:17:19 · 527 阅读 · 0 评论 -
统计字符串中的英文字母的个数C++代码实现
运行后可能出现警告,但是不影响结果,出现警告的原因是 s存放在constan区域,但在程序的声明中却用指针进行声明的。#include<iostream>#include<cstring>using namespace std;class wordnum{ char str[80]; int c; public: wordnum(char *s)...原创 2020-01-06 16:24:48 · 3197 阅读 · 0 评论 -
求指定范围内的所有素数C++代码实现
题目简单,直接上代码#include<iostream>using namespace std;class primenum{ int data[25]; int span1,span2; int num; public: primenum(int n1,int n2) { num=0; span1=n1;span2=n2; } int ...原创 2020-01-06 15:52:49 · 988 阅读 · 0 评论 -
超长数列中n个整数排序C++代码实现
题目要求:给出一个数组,要求对其中指定的几个数进行排序思路:利用冒泡排序对指定的几个数进行排序即可#include<iostream>using namespace std;class LIST{ int size; int *arr; public: LIST(int a[],int len) { size=len; arr=new int[...原创 2020-01-06 15:36:03 · 292 阅读 · 0 评论 -
分数运算C++代码实现
求两个分数的和:思路:首先两个分数的分母相乘,各自的分子分别乘以对方的分母,然后再利用辗转相除算法去求分子和分母的最大公约数。需要注意的一点是在利用类进行定义求和函数的时候要把参数sum和add也定义为类,因为sum和add包含分子和分母,是一个整体,当然你也可以不去定义但是程序写起来比较冗余,体验不到c++类的优势。代码如下:#include<iostream>using n...原创 2020-01-05 16:58:07 · 1747 阅读 · 1 评论 -
求两个数集的并集C++代码实现
算法思路:求集合a和集合b的并集,我们可以在设置一个临时的集合C,先把集合a的数放入集合C,然后建立一个查找函数,查找集合b的数是否在集合C,如果不在集合C则选择添加到集合C;如果在集合C,不执行任何操作。代码如下#include<iostream>using namespace std;class SET{ int a[40],b[40],c[40]; int num...原创 2020-01-05 15:26:26 · 4871 阅读 · 0 评论 -
C++leetcode找出两个有序数组的中位数(2)
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。如果不考虑复杂度的话这个题目很简单:将两个数组合并为一个数组,然后用冒泡排序算法将合并后的数组进行排序,然后用二分法找出中间的数,但是这个复杂度远远超过O(log(m + n)),因为光冒泡排序就是O(n^2)。今天在leetcode上...原创 2019-10-16 03:36:44 · 194 阅读 · 0 评论 -
算法练习之leetcode两数相加(1)
题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0...原创 2019-10-15 03:11:58 · 185 阅读 · 0 评论 -
c++学习笔记之类模板
类是对象的抽象,类模板是类的抽象。比较两个数(不同类型)的大小在类模板内定义成员函数#include<iostream>using namespace std;template<class numtype>class compare{ public: compare(numtype a,numtype b) { x=a;y=b; }...原创 2018-11-22 10:24:58 · 121 阅读 · 0 评论 -
c++学习笔记之友元函数
友元函数例子代码功能用来显示时间display函数放在time类中作为date类的友元函数#include<iostream>using namespace std;class date;//类的提前声明 class time{ public: time(int,int,int); void display(date &); private: int...原创 2018-11-22 09:14:34 · 346 阅读 · 0 评论 -
c++学习笔记之类和对象的进阶
此程序的作用是统计销售额和商品的平均售价,涉及到的知识有静态成员函数和初始化和应用#include<iostream>using namespace std;class product{ public: product(int m,int q,float p):num(m),quantity(q),price(p){}; void total(); stati...原创 2018-11-21 10:21:29 · 169 阅读 · 0 评论 -
c++学习笔记之静态成员函数
静态成员函数设置的目的是为程序中一些变量保值而设定的定义静态成员函数需要注意的几点(1)静态成员函数主要用来访问静态数据成员,而不访问非静态成员(2)静态成员函数是类的一部分而不是对象的一部分。统计学生的平均成绩代码#include<iostream>using namespace std;class student{ public: student(...原创 2018-11-05 09:40:53 · 137 阅读 · 0 评论 -
对象的赋值和复制
对象赋值的一般形式为对象名1=对象名2对象的赋值代码举例#include<iostream>using namespace std;class box{ public: box(int=10,int=10,int=10); int volume(); private: int height; int width; int length;};...原创 2018-11-04 21:45:24 · 263 阅读 · 0 评论 -
c++学习笔记之类的应用
类是c++的灵魂,以前光学C语言了,一直觉得c++和c没什么区别,今天接触了c++的类才知道c++使程序多么的简洁高效。类是多么的重要,才感觉到前面学的c++不仅仅是对c的复习与巩固。所以学什么东西一定要坚持,今天是坚持打卡的第十天,加油!!!希望自己未来成为一名优秀的工程师。加油各位,另外也要注重保护自己的身体,好好的去爱自己的家人,珍惜每一天,因为明天和意外不知道哪个先来。在此为自己喜欢的主持...原创 2018-10-29 22:42:24 · 112 阅读 · 0 评论 -
c++学习笔记之运算符的重载
代码作用:将+号扩充到复数的运算#include<iostream>using namespace std;class complex{ public: complex(){real=0;imag=0;} complex(double r,double i){real=r;imag=i;} complex operator + (complex&c2)...原创 2018-11-22 11:15:55 · 106 阅读 · 0 评论 -
c++学习笔记之运算符的重载
运算符的重载包括双目运算符+的重载和输入输出流运算符的重载。代码的功能是实现2行3列矩阵的加法代码如下#include<iostream>using namespace std;class matrix{ public: matrix(); friend matrix operator +(matrix&,matrix&); frien...原创 2018-11-24 15:57:00 · 146 阅读 · 0 评论 -
c++编程练习之删除序列中相同的数
#include<iostream>using namespace std;class arr{ int m; int a[100]; public: arr(int x[],int size) { m=size; for(int i=0;i<m;i++) a[i]=x[i]; } void delsame(); void...原创 2018-11-25 20:10:32 · 1106 阅读 · 0 评论 -
c++数组初始化
一、一维数组 静态 int array[100]; 定义了数组array,并未对数组进行初始化 静态 int array[100] = {1,2}; 定义并初始化了数组array 动态 int* array = new int[100]; delete []array; 分配了长度为100的数组array 动态 int* array = new int[100](1,...转载 2018-11-25 14:40:20 · 610 阅读 · 0 评论 -
c++小项目练习之复数计算器
准备了一个月的考试终于结束了。总结一下这一个月学到的理论知识,规划一下1月的计划。昨天敲了一天的代码。复数计算器是我敲的第一个比较大的程序,涉及到的主要知识点是运算符的重载和文件操作。纯代码后面再做详细的介绍。#include<iostream>#include<cmath>#include<cstdlib>#include<cstring&g...原创 2018-12-31 10:20:56 · 671 阅读 · 0 评论 -
C++文件操作
C++ 通过以下几个类支持文件的输入输出:ofstream: 写操作(输出)的文件类 (由ostream引申而来)ifstream: 读操作(输入)的文件类(由istream引申而来)fstream: 可同时读写操作的文件类 (由iostream引申而来)打开文件(Open a file)对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就是说打开一个文件。被...原创 2019-01-01 15:09:44 · 325 阅读 · 0 评论 -
今日C++练手之求指定范围内的素数
#include<iostream>using namespace std;class primenum{ int data[25]; int span1,span2; int num; public: primenum(int n1,int n2) { num=0; span1=n1; span2=n2; } int isprime(...原创 2019-03-14 21:21:12 · 677 阅读 · 0 评论 -
今日练手之求二维数组的非对角线元素之和
#include<iostream>using namespace std;class matrix{ int m; int sum; int a[40][40]; public: matrix(int x[][40],int k) { m=k; for(int i=0;i<k;i++) for(int j=0;j<k;j++) ...原创 2019-03-11 10:07:35 · 683 阅读 · 1 评论 -
C++之今日练手二维数组循环移位
#include<iostream>using namespace std;#define M 3#define N 4class tdarray{ int a[M][N]; public: tdarray(int x[M][N]) {int i,j; for(i=0;i<M;i++) for(j=0;j<N;j++) a[i][j...原创 2019-03-18 09:36:42 · 1072 阅读 · 0 评论 -
今日c++练手之寻找n个连续的合数
算法的关键在于如何寻找连续的合数重点在连续,所以需要有标志位。只有连续的n个数都是合数才可以退出这个循环。并且找的这个数组每检测n个数都要重新开始计算。具体代码如下#include<iostream>using namespace std;class noprime{ int n; int *p; public: noprime(int n1) { n=...原创 2019-03-19 10:54:22 · 1827 阅读 · 1 评论 -
c++学习笔记之成员函数
学了c++才知道什么是面向对象什么是面向过程。幼稚的我曾经还觉得c++和C语言差不多,接触之后才知道c++是多么的难,光类和对象这个知识点就看了一天。什么构造函数析构函数,对象数组对象成员弄得我头大,现在才知道为什么老师说c++是最难的语言,学c++就是在地狱里磨炼,从地狱出来就是天堂,会有会当凌绝顶一览众山小的感觉,希望自己能坚持到底,尽自己的最大努力把C++学好,不求泛而多,只求专而精。哎老大...原创 2018-10-31 21:14:04 · 1024 阅读 · 0 评论