- 博客(39)
- 资源 (1)
- 收藏
- 关注
原创 OpenCASCADE基本建模环境
OpenCASCADE 是一套开放源代码的CAD/CAM/CAE几何模型核心,这一套函数库系统原来是著名的CADCAM软体EUCLID的开发平台,源自于法国的Matra Datavision公司。
2022-04-16 20:05:41
1525
8
原创 智能指针小述
智能指针作用是在函数结束时自动释放内存空间,不需要手动释放;不使用智能指针易出现:1.忘记释放,造成内存泄漏2.尚有指针引用,但已经释放,造成存在非法内存指针。
2022-03-04 20:33:06
139
原创 图的存储结构C++实现
图结构作为一种比线性表和树更为复杂的数据结构,任意两个数据元素之间都有可能相关。在离散数学中有图论一章,就是专门研究图的性质的。
2021-11-24 11:04:25
1653
原创 二叉树数据结构及哈夫曼树(C++代码)
二叉树作为非线性数据结构,是以分支关系定义层次结构,以下重点为二叉树的存储结构及基本操作,以及树与二叉树之间的转化,最后介绍特殊的树结构——哈夫曼树。
2021-11-23 20:04:22
1265
原创 双向循环链表C++
双向循环链表是在循环链表(不定义头指针,而是定义尾指针)的基础上,增加一个指针域,注意头节点的前驱是指向最后一个元素,链表中存在两个环。
2021-11-23 09:25:44
1422
3
原创 线性表链式存储
单链表#pragma once#include<iostream>using namespace std;const int ERROR = 0;const int OK = 1;template<class Elemtype>class LNode{public: Elemtype data; LNode* next;};template<class Elemtype>class Mylist{public: Mylist(.
2021-11-09 20:37:41
250
原创 线性表顺序表示的C++语言实现
#include<iostream>#include<string>using namespace std;const int Maxsize = 20;const int ERROR = 0;const int OK = 1;template <class T>class MyList{public: MyList();// 初始化 ~MyList(); void InitList(int i,T *e); void ClearLis.
2021-11-08 21:39:51
399
原创 C++练习题2:机房预约系统
学校现有几个规格不同的机房,由于使用时经常出现"撞车"现象,现开发一套机房预约系统,解决这一问题。分别有三种身份使用该程序学生代表:申请使用机房;教师:审核学生的预约申请;管理员:给学生、教师创建账号机房总共有3间* 1号机房 --- 最大容量20人* 2号机房 --- 最多容量50人* 3号机房 --- 最多容量100人申请简介* 申请的订单每周由管理员负责清空。* 学生可以预约未来一周内的机房使用,预约的日期为周一至周五,预约时需要选择预约时段(上午、下午...
2021-11-04 21:08:12
655
原创 C++练习题1:演讲比赛程序
规则:学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛。比赛方式:分组比赛,每组6个人;选手每次要随机分组,进行比赛每名选手都有对应的编号,如 10001 ~ 10012第一轮分为两个小组,每组6个人。 整体按照选手编号进行抽签后顺序演讲。当小组演讲完后,淘汰组内排名最后的三个选手,前三名晋级,进入下一轮的比赛。第二轮为决赛,前三名胜出每轮比赛过后需要显示晋级选手的信息具体的视频讲解链接:黑马程序员匠心之作|C++教程从0到1入门编程,学习
2021-11-01 21:11:47
548
原创 函数对象:一元谓词、二元谓词
1. 函数对象可以有自己的状态。我们可以在类中定义状态变量,这样一个函数对象在多次的调用中可以共享这个状态。但是函数调用没这种优势,除非它使用全局变量来保存状态2. 函数对象有自己特有的类型,而普通函数无类型可言。这种特性对于使用C++标准库来说是至关重要的。这样我们在使用STL中的函数时,可以传递相应的类型作为参数来实例化相应的模板,从而实现我们自己定义的规则。比如自定义容器的排序规则。下图为函数对象的程序示例:#include<iostream>#include<str
2021-10-30 10:43:32
554
原创 STL之map容器(一般详细)
作为关联式容器的一种,map 容器存储的都是 pair 对象,也就是用 pair 类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,包括C++基本数据类型(int、double 等)、使用结构体或类自定义的类型。在使用 map 容器存储多个键值对时,该容器会自动根据各键值对的键的大小,按照既定的规则进行排序(不涉及自定义数据类型)。默认情况下,map 容器选用std::less<T>排序规则,如果想更改默认顺序,那又是一波仿函数了。另外需要注意的是,使用 map 容器...
2021-10-29 16:38:07
1377
原创 STL之set容器(一般详细)
1.关于setC++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储
2021-10-27 21:11:35
303
原创 STL之list容器(超详细)
功能:将数据进行链式存储,链式存储就要提到C语言里的链表概念。链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的组成:链表由一系列结点组成结点的组成:一个是存储数据元素的数据域(储存的数据),另一个是存储下一个结点地址的指针域(存储下一个元素和前一个元素的地址)STL中的链表是一个双向循环链表由于链表的存储方式并不是连续的内存空间,因此链表中的迭代器只支持前移和后移,属于双向迭代器。list的特点:(1)不使用连续...
2021-10-26 21:32:07
270
原创 STL之queue容器
queue是一种先进先出的数据结构,有两个出口,一端新增元素,另一端移除元素;队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为。queue不支持随机访问,即不能像数组一样地任意取值。并且,queue并不支持全部的vector的内置函数。比如queue不可以用clear()函数清空,清空queue必须一个一个弹出。同样,queue也并不支持遍历,无论是数组型遍历还是迭代器型遍历统统不支持,所以没有begin(),end();函数,使用的时候一定要清楚异同!...
2021-10-26 16:57:59
262
原创 STL之stack容器
栈(stack)是简单的数据结构,但在计算机中使用很广泛,它的定义很简单:只允许在一端进行插入或删除操作的线性表,所以首先栈是一种线性表,其次栈限定只能在某一端进行插入和删除操作。我们来举一个形象的例子,当我们往箱子里放一叠书的时候,先放的书在箱子最下面,后放的书在箱子上面,当我们拿书的时候,必须将后面放的书都取出来,才能看到或者拿出前面放的书。假如这个箱子的平面面积只能容纳一本书,并且所有书的面积也完全契合箱子的平面面积,放书的时候只能平着放,不能竖着放(程序员考虑的问题就比较多),那..
2021-10-26 16:04:42
166
原创 STL之deque容器
deque 是 double-ended queue 的缩写,又称双端队列容器。deque 容器和 vecotr 容器有很多相似之处,比如:deque 容器也擅长在序列尾部添加或删除元素,而不擅长在序列中间添加或删除元素。 deque 容器也可以根据需要修改自身的容量和大小。和 vector 不同的是,deque 还擅长在序列头部添加或删除元素。并且更重要的一点是,deque 容器中存储元素并不能保证所有元素都存储到连续的内存空间中。当需要向序列两端频繁的添加或删除元素时,应首选 deq.
2021-10-19 21:57:58
302
原创 !!!vector<bool>不是存储bool类型元素的容器
具体来讲,不推荐使用 vector<bool> 的原因有以下 2 个:严格意义上讲,vector<bool> 并不是一个 STL 容器; vector<bool> 底层存储的并不是 bool 类型值。 值得一提的是,对于是否为 STL 容器,C++ 标准库中有明确的判断条件,其中一个条件是:如果 cont 是包含对象 T 的 STL 容器,且该容器中重载了 [ ] 运算符(即支持 operator[]),则以下代码必须能够被编译:T *p...
2021-10-19 20:45:53
2725
原创 vector容器详解
vector数据结构和数组非常相似,也称为单端数组。vector可以说是一个动态数组,它可以存储任何类型的数据,包括类!vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展**动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间vector容器的迭代器是支持随机访问的迭代器使用vector需包含头文件#include< vector >1....
2021-10-19 19:29:59
4355
原创 String类
string作为C++语言的风格string:string是STL当中的一个容器,对其进行了封装。 char*:char *是一个指针,可以指向一个字符串数组,至于这个数组可以在栈上分配,也可以在堆上分配,堆得话就要你手动释放了。string和char * 区别:**string的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存问题。char *的内存管理由用户自己处理,很容易出现内存不足的问题。当我们要存一个串,但是不知道其他需要多少内存时, 用string来处理就最
2021-10-19 14:19:10
67
原创 STL(Standard Template Library)初识
1.STL(Standard Template Library)STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。STL的一个重要特点是数据结构和算法的分离。尽管
2021-10-18 19:23:11
200
原创 C++之类模板
#include<iostream>#include<string>using namespace std;template <typename NameType,typename AgeType>class Person{public: Person(NameType c_name,AgeType c_age):name(c_name),age(c_age){} void Show(); NameType name; AgeType age;}.
2021-10-18 19:01:26
186
原创 C++之函数模板
之前我们知道的交换两个变量的方法有宏定义、函数,这两种方式都能实现两个变量的交换,但是各有各的优缺点 宏定义: - 优点:代码复用,适合所有的类型 - 缺点:缺少类型检查,宏在预处理阶段就被替换掉,编译器并不知道宏的存在 函数: - 优点:真正的函数调用,编译器对类型进行检查 - 缺点:类型不同需要重复定义函数,代码无法复用上边两种方式都各有利弊,但是在C++中,存在泛型编程的概念:即不考虑具体数据类型的编程方式(如下)C++中的泛型编程有函数模板...
2021-10-14 16:06:00
112
原创 C++之类继承和多态(虚函数、构造函数,析构函数)
1.虚函数C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。#include<iostream>#include<string>using namespace std;
2021-10-07 20:02:12
693
原创 C++之运算符重载
目录1.算数运算符重载p1+p22.重载运算符<<3.递增运算符重载4.递减运算符重载5.赋值运算符重载6.关系运算符重载7.函数调用运算符重载1.算数运算符重载p1+p2#include<iostream>#include<string>using namespace std;class Student{public: Student(double a,double b,double c):Chinese(a),Mat
2021-10-02 19:48:02
183
原创 C++之类对象的友元
1.基本内容在C++中,我们使用类对数据进行了隐藏和封装,类的数据成员一般都定义为私有成员,成员函数一般都定义为公有的,以此提供类与外界的通讯接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。友元函数 : 友元函...
2021-09-30 17:21:23
115
原创 C++之类对象的常函数和常对象
#include<iostream>using namespace std;class Person{public: Person(int age) { //1、当形参和成员变量同名时,可用this指针来区分 this->age = age; } Person& PersonAddPerson(Person p)//返回的是p2,所以返回类别是Person类,但如果仅返回Person类也不行 //如果仅以Person类返回,默认的是创造了一个与.
2021-09-30 17:10:47
117
原创 C++之构造函数(2)深拷贝和浅拷贝
浅拷贝和深拷贝,在属性有堆区开辟,一定要自己提供拷贝构造函数。重点看程序注释!#include <iostream>#include<string>using namespace std;class Person {public: Person() { cout << "无参构造函数!" << endl; } //有参构造函数 Person(int a) { age = a; cout << "有参构
2021-09-29 15:03:40
80
原创 C++之构造函数
构造函数的定义(分类)及构造函数的引用问题构造函数的作用就是在创建类对象后,就执行构造函数你自己不定义,编译器会帮你定义,不过函数体为空,不执行任何操作,只是涮一遍两种分类方式:按参数分为: 有参构造和无参构造;按类型分为: 普通构造和拷贝构造调用构造函数时,可以通过三种方法: 括号法、 显示法、隐式转换法具体可以看下面的程序,每一行都标有注释#include <iostream>#include<string>using namespace...
2021-09-28 13:39:25
146
原创 C++之堆区空间开辟和释放;C++之引用
1.堆区空间的开辟和释放下边是局部变量由编译器开辟空间,当函数调用结束,空间自动释放,因此,第二个cout无法输出。int* fun(){ int a = 10;//局部变量在程序运行的时候放在栈区,尽量不要返回地址,因为函数结束,编译器自动释放 int* p = &a; return p;//调用函数结束,a=10这段空间释放}int main(){ int* fun();//函数声明 int *p=fun();//函数调用,返回类型一个
2021-09-28 13:31:36
2560
原创 C语言与C++的区别一览
从C语言跳到C++之前,可以先看下本文,以了解C++在语法上的变化!只描述C++基础部分,不涉及C++标准库,类设计者的工具及其他高级主题等部分。1.头文件的区别C++的头文件是#include <iostreams>;2.命名空间例如,一个名为 fun() 的函数,在另一个可用的库中也存在一个相同的函数 fun()。这样,编译器就无法判断您所使用的是哪一个 fun() 函数。因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、.
2021-09-24 19:11:00
636
原创 C语言-通过指针引用数组的知识框架
目录前言1.数组元素的指针2.引用数组元素指针的运算3.通过指针引用数组元素4.用数组名作函数参数归纳:如果有一个实参数组,要想在函数中改变此数组元素中的元素的值,实参与形参有四种可能:5.通过指针引用多维数组1)多维数组元素的地址2)指向多维数组元素的指针变量前言指针变量本质上是变量,首先就是要定义指针变量,基本格式为:类姓名 *指针变量名(例如:int *p),定义指针变量的同时,要对指针变量进行赋值,否则,这个指针就有可能指向隔壁老王家的门,...
2021-09-17 13:00:57
224
原创 C语言综合应用实例(1)
“你处理情绪的速度,就是你迈向成功的速度。”C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。之前在之后上看过一段话“C语言水平决定你C++水平的上限”。今天第一次分享,争取每天敲代码,分享在这里。相比于C语言书上,利用C语言解决数学问题的例子太多了,真正让人们感兴趣的,我想就是设计一些有意思的程序。这里提供一个“井字棋”小程序。可以作为在进入学习指针部分之前的一个综合应用。井字棋的规则可自行百度哈!主程序:#include"game.h"int ma.
2021-09-15 20:07:40
901
数据结构与算法知识点万字总结.docx
2021-11-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人