【C/C++】
文章平均质量分 58
_ClivenZ
一只成长中的C/C++菜鸟
展开
-
【C++】如何释放vector的内存空间及std::vector::shrink_to_fit用法简介
如何对vector内存空间释放,C++11 shrink_to_fit,方法简介。原创 2022-09-21 12:12:37 · 2312 阅读 · 0 评论 -
C/C++程序中记录运行时间的方法
如何在C/C++程序中记录程序运行所用时长。原创 2022-08-17 15:14:41 · 2009 阅读 · 0 评论 -
NC121 字符串的排列
NC121 字符串的排列原创 2021-12-14 16:51:13 · 309 阅读 · 0 评论 -
关于常见的各种链表算法题C++代码实现(希望可以持续更新…)
关于各种常见链表算法C++的代码实现原创 2021-12-07 15:32:32 · 1586 阅读 · 0 评论 -
关于常见的各种二叉树算法题C++代码实现(希望可以持续更新…)
各种常见的二叉树算法题原创 2021-12-07 15:03:54 · 1196 阅读 · 0 评论 -
【C++自学笔记】STL-详细解析map、mulitmap(关联式容器)
一、关联式容器概念1、关联式容器关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存放的是<key,value>结构的键值对,在数据检索时比序列式容器效率更高。2、键值对用来表示具有一一对应关系的一种结构,该结构中包含两个成员变量 key 和 value ,key 表示键值,value 表示与 key 所对应的信息。template<class T1...原创 2019-08-22 15:26:48 · 677 阅读 · 0 评论 -
【C++自学笔记】哈希结构浅识(如何解决哈希冲突—闭散列、开散列)待更新~
一、哈希概念顺序结构以及平衡树中,元素的关键码与其存储位置之间没有对应关系,因此在查找一个元素的时候,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为数的高度,即O(log2N),搜索的效率取决于搜索过程中元素的比较次数;理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码...原创 2019-08-24 23:16:01 · 305 阅读 · 0 评论 -
【C++自学笔记】类的六个默认成员函数
一、构造函数构造函数是特殊的成员函数,需要注意的是,构造函数名称虽然叫构造函数,但是需要注意的是它并不是开辟空间创建对象,而是对对象进行初始化。如果类中没有显示定义构造函数,C++编译器会自动生成一个无参的构造函数,一旦用户显示定义编译器将不再生成。class Date{public: //无参的构造函数 Date(){ } //带参的构造函数 ...原创 2019-08-14 16:03:48 · 165 阅读 · 0 评论 -
【C++自学笔记】详细理解AVL树(插入、左单旋、右单旋、左右单旋、右左单旋)
一、AVL树的概念二叉搜索树虽然可以缩短查找的效率,但是如果数据有序或者接近有序二叉搜索树将退化为单只树,查找元素相当于在顺序表中搜索元素,效率低下。因此,引入AVL树:当向二叉搜索树中插入新节点后,如果能保证没给节点的左右子树盖度之差的绝对值不超过1(需要对树中的节点进行调整),即可降低树的高度,从而减少平均搜索的长度。一棵AVL树或者是空树,或者具有以下性质的二叉搜索树:它的左右子...原创 2019-08-24 19:14:36 · 565 阅读 · 0 评论 -
【C++自学笔记】从C到C++入门级的小知识(引用、内联函数、auto关键字、范围for循环)
一、引用1、引用的定义引用是C++中的一个很重要的概念,引用不是新定义了一个变量,而是给已经存在的变量取了一个别名,实际上编译器并不会为它分配新的内存空间,它和它所引用的变量使用同一块命名空间。其语法为:类型& 引用变量名(对象名) = 引用实体;void TestFun() { int a = 10; int& ra = a; cout << ...原创 2019-08-11 22:11:42 · 171 阅读 · 0 评论 -
【C++自学笔记】STL-list的深度剖析及模拟实现(源码)
一、list的介绍及使用1、list 的介绍list 是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代; list 底层时双向链表结构,双向链表中每个元素存储在互不想关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素; list 和 forward_list 非常相似,主要不同在于 forward_list 是单链表,只能朝前迭代,已让其简单...原创 2019-08-20 21:03:51 · 376 阅读 · 0 评论 -
【C++自学笔记】STL—详细理解deque
一、deque的介绍1、deque是一种动态大小的双端队列,属于序列式容器,两端均可伸缩;2、特定的库可以以不同的方式实现deque ,但是通常都是一种动态数组,不论任何情况下,它都允许通过随机访问迭代器的方式直接访问单个元素,可以根据需要动态伸缩;3、deque 提供了一些与 vector 类似的功能,但是 deque 在头部和尾部的插入过程中效率更高,与 vector 不同的是,d...原创 2019-08-21 20:08:23 · 252 阅读 · 0 评论 -
【C++自学笔记】STL—详细理解stcak和queue、priority_queue 及 其模拟实现(容器适配器)
一、stack的介绍和使用1、stack的介绍1、stack是一种容器适配器,专门用于具有LIFO(后进先出)的上下问环境中,其删除只能从容器的一端进行,元素的插入和提取操作;2、stack时作为容器适配器被动实现的,容器适配器即使对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(栈顶)被压入或者弹出;3、stack的底层...原创 2019-08-21 21:34:27 · 561 阅读 · 0 评论 -
【C++自学笔记】STL-详细解析set、mulitset(关联式容器)
一、set和multiset 的介绍和使用1、set1、set的介绍set是按照一定次序存储元素的容器,在set 中,元素的 value也标识它(value就是key,类型为T),并且每个value必须是唯一的,set 中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或者删除他们; 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则...原创 2019-08-22 15:49:40 · 935 阅读 · 0 评论 -
【C++自学笔记】详细解读——C++面向对象之继承(内含详细理解菱形继承和菱形虚拟继承)
一、继承的概念及定义1、继承的概念继承机制是面向对向程序涉及使代码可以复用的最重要的手段,它允许程序猿在保持原有类特性的基础上进行了扩展,增加功能,产生新的类,称为派生类(子类)。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程,继承是类设计层次的复用。2、继承的定义先看一个例子:class Person {public: void Print() ...原创 2019-08-17 22:02:13 · 267 阅读 · 0 评论 -
【C++自学笔记】详细解读——C++面向对象之多态
一、多态的定义及实现多态:通俗来说,就是多种形态,具体点就是完成某个行为,当不同的对象去完成时会产生出不同的状态;1、多态的构成条件多态是在不同继承关系的类对象,去调用同一个函数,产生了不同的行为。在继承中构成多态还有两个条件:必须通过基类的指针或者引用调用虚函数; 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。2、虚函数(被关键字 virtual 修饰的类...原创 2019-08-18 19:16:51 · 389 阅读 · 0 评论 -
【C++自学笔记】深度理解二叉搜索树(模拟实现及源代码C++)
一、二叉搜索树1、二叉搜索树的概念二叉搜索树又称二叉排序树,它或者是一颗空树,有以下性质:若它的左子树不为空,则左子树上所有结点的值都小于根结点的值; 若它的右子树不为空,则右子树上所有结点的值都大于根结点的值; 它的左右子树也分别为二叉搜索树; int a[ ] = { 5,3,4,1,7...原创 2019-08-22 20:16:59 · 195 阅读 · 0 评论 -
C语言实战——猜数字小游戏
C语言实战——猜数字小游戏猜数字小游戏是个非常经典的小游戏,很多人都玩过猜数字游戏(给定一个范围的数字,通过几次猜测确定正确值),通过对C语言的学习,对猜数字游戏实现简单的编写。游戏编写很简单,主程序加一个判断猜测数字大小的判断程序。大致思路先是利用随机数的生成随机数,然后用随机数%,得到确定范围,然后输入猜测数字与随机数通过if判断语句来进行比较。需要用到if语句的判断,while循环,do...原创 2018-11-27 17:02:18 · 862 阅读 · 0 评论 -
【C++自学笔记】从C到C++入门级的小知识(命名空间、标准输入/输出、缺省参数、函数重载)
一、命名空间在C语言中,我们通常会遇到一个问题,就是在给函数起名字的时候怎么起呢,大部分人用汉语拼音,高端一些的人士会用英文,但是这也避免不了会有名字冲突的情况发生,一旦名字冲突那整个工程都将无法进行编译。在C++中,引用入了命名空间的这个概念来解决这个问题,它最主要的功能就是解决了名字相互冲突的问题。1、命名空间的定义定义一个命名空间,需要用到 namespace 这个关键字,后面跟...原创 2019-08-10 23:07:00 · 185 阅读 · 0 评论 -
【C++自学笔记】STL—vector详解及模拟实现
一、什么是vector?vector是表示可变大小数组的序列容器;vector就像是数组一样,也采用连续存储空间来存储元素,同样可以使用下标来访问vector的元素,它和数组差不多,但是它的大小是可变的,并且它的大小是会被容器自动处理的;二、vector的使用需要包含<vector>头文件,需要std命名空间(using namespace std)1、vector...原创 2019-08-17 21:01:03 · 384 阅读 · 0 评论 -
C语言基础训练_05(函数)
1.实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定,输入9,输出9*9口诀表,输入12,输出12*12的乘法口诀表。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int Fun1(int m){ int i,j; for (i=1;i<=m;i++) ...原创 2018-12-03 19:04:46 · 201 阅读 · 0 评论 -
C语言实战——折半查找(二分法)
写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找) 搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果者小于中某一特定元素大于或间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。#inc...原创 2018-12-02 16:46:05 · 768 阅读 · 0 评论 -
C语言基础训练_04
1.编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。#include<stdio.h>#include<stdlib.h>int main(){ char a = 0; printf("请输入字符(仅限字母):"); //ASCII表中'A'与'a'中相差32 ...原创 2018-12-02 15:15:34 · 233 阅读 · 0 评论 -
C语言实战——简易模拟登陆系统
C语言实战——简易模拟登陆系统#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int main(){ char password[5] = {0};int i=0; printf("*****欢迎登陆本系统*****\n"); while(i<3) { ...原创 2018-11-27 17:04:57 · 1303 阅读 · 1 评论 -
C语言基础训练_03
1.打印出0~999之间的水仙花数。首先了解到,水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。此程序中用到了库函数pow(函数原型:double pow(double x, double y),x的y次方),使用pow函数时,需要将头文件#include<math.h>包含进源文件中。#inclu...原创 2018-11-25 19:36:42 · 182 阅读 · 0 评论 -
C语言基础训练_02
1.给定两个整形变量的值,将两个值的内容进行交换。假设a=10,b=20,借助于中间变量c,先将a的值赋给c,再将b的值赋给a,最后将c的值赋给b,完成交换。#include<stdio.h>#include<stdlib.h>int main(){ int a = 10, b = 20; int c; c = a; a = b; b = c; ...原创 2018-11-24 16:11:58 · 162 阅读 · 0 评论 -
C语言基础训练_01
1.输出乘法口诀表第一次尝试过程中,用了两个for循环语句,但没有考虑当i和j相等的情况,所以在最终程序中加入了,当“i=j”时做换行处理,进入下一次循环。#include<stdio.h>#include<stdlib.h>int main(){ int i, j, m; for (i = 1; i <= 9; i++) { for (j ...原创 2018-11-22 16:51:45 · 300 阅读 · 0 评论 -
【C++自学笔记】STL—string类详解及自主实现string类
一、什么是string类?1、C语言中的字符串C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库 中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。2、什么是string类?string类是表示字符串的字符串类,该类的接口与常规容器的接口基本相同,再添加了一些专门用来...原创 2019-08-02 22:43:24 · 769 阅读 · 0 评论 -
C语言实战——银行利率,正方形,平行四边形
1.已知银行整存整取存款不同期限的月息利率分别为:0.315% 期限一年0.330% 期限二年0.345% 期限三年0.375% 期限五年0.420% 期限八年要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>/**...原创 2018-12-04 23:30:30 · 1013 阅读 · 0 评论 -
C语言实战——在无序数组中查找指定值
首先,在数组中查找指定值,首先想到的就是折半查找法(二分法),但在折半法中,要求数组必须是有序的,所以可以先将数组内的数据进行相关的排序工作后,再运用二分法查找。int BinarySearch(int* array,int size,int value);//折半查找int BubbleSort(int* array,int* size,int is_desc);//冒泡...原创 2019-03-12 20:32:05 · 4894 阅读 · 0 评论 -
【C++自学笔记】详细理解智能指针
一、智能指针的使用及原理1、RAIIRAII是一种利用对象生命周期来控制程序资源(内存、文件句柄、网络连接、互斥量等等)的简单技术;在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终有效,最后在对象析构的时候释放资源。借此,我们实际上把管理一份资源的责任托管给了一个对象,有两大好处:不需要显示的访问; 采用这种方式,对象所需要的资源在其生命期内始终有效;2、s...原创 2019-08-19 20:51:06 · 202 阅读 · 0 评论 -
【C++自学笔记】C/C++的异常处理
一、C语言传统的处理错误方式实际上C语言基本都是使用返回错误码的方式处理错误,部分情况使用终止程序处理非常严重的错误;终止程序:assert ,缺陷:用户难以接收,如果发生内存错误,除 0 错误时就会终止程序; 返回错误码:缺陷:需要程序猿自己去查找对应的错误,如系统的很多库的接口函数都是通过把错误码放到 error 中,表示错误; C标准库 setjmp 和longjmp组合,这...原创 2019-08-19 17:23:55 · 244 阅读 · 0 评论 -
【C++自学笔记】几个特殊的类(不能被继承、只能在堆上、只能在栈上)
一、实现一个不能被继承的类1、C++98 中构造函数私有化,派生类中调不到基类的构造函数,则无法被继承;class NonInherit {public: static NonInherit GetInstance() { return NonInherit(); }private: NonInherit() { }};2、C++11 关键字 final 可以禁止...原创 2019-08-19 15:33:16 · 184 阅读 · 0 评论 -
【C++自学笔记】C/C++内存管理
一、C/C++内存分布先看一段C语言代码:int globalVar = 1;static int staticGlobalVar = 1;void Test() { static int staticVar = 1; int localVar = 1; int num1[10] = { 1, 2, 3, 4 }; char char2[] = "abcd"; char*...原创 2019-08-18 23:00:21 · 266 阅读 · 0 评论 -
C语言实战——扫雷小游戏
1.使用二维数组来表示地图 a)地雷的布局图(char 类型的数组,用'0'表示不是地雷,'1'表示是地雷) b)玩家看到的地图(哪些位置未翻开,哪些位置翻开), (char 类型的数组表示,如果' '表示未翻开,如果是数组表示已经翻开,并且当前位置周围8个格子有几个雷)2.初始化 a)地雷的布局地图,先把这个二维数组全部都初始化成'...原创 2019-03-15 12:12:51 · 343 阅读 · 0 评论 -
C语言实战——三子棋
1.使用字符类型二维数组来表示棋盘(3 * 3)使用‘x’表示玩家的子,‘0’表示电脑的子2.玩家落子,给玩家一个友好的提示,提示让玩家落子,输入一组坐标== > 判定游戏结束 a、玩家获胜 b、电脑获胜 c、和棋 d、游戏没结束3.电脑落子,随机数的方式== > 判定游戏结束 a、玩家获胜 b、电脑获胜 c、和...原创 2019-03-14 16:56:48 · 183 阅读 · 0 评论 -
C语言练习——递归(2)
函数的递归1..写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>//非递归int DigitSum_Nd(in...原创 2019-03-13 18:46:03 · 260 阅读 · 0 评论 -
C语言练习——递归(1)
函数的递归程序用自身的变成技巧成为递归(recursion);递归的主要思考方式在于:把大事化小递归的两个必要条件: 1.存在限制条件,当满足这个限制条件的时候,递归便不再继续; 2.每次递归调用之后越来越接近这个限制条件;1.用递归和非递归的方式求第N个斐波那契数斐波那契数:1,1,2,3,5,8,13,21,34,,,,,N规律:从第三项开始...原创 2019-03-13 17:03:41 · 297 阅读 · 0 评论 -
【C++】简易GIF生成器(斗图神器!必备!!!)持续更新~
一个练手小项目,主要语言的是C++,其主要依赖Duilib库和ffmpeg音视频编解码工具。一、Duilib—轻量级的C++界面开发库DuiLib库是一款由杭州月牙儿网络技术有限公司开发,轻量级的C++界面开发库,遵循开源BSD协议,可以免费用于商业项目。很多大公司的界面就是用它完成的,这里也是第一次接触这个开源库,所以在这里放下大牛 Alberl 的教程链接。duilib入门简明教程-Alb...原创 2019-07-29 16:08:37 · 1617 阅读 · 0 评论