![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++学习笔记
作为跨考生的我虽然在本科阶段学习过C++,不过依然出于小白状态,为此准备用一个暑假的时间重新从头到尾学习C++。
我是小洋
这个作者很懒,什么都没留下…
展开
-
演讲比赛流程管理系统
1 比赛规则学校举行异常演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛。每名选手都有对应的编号,如10001-10012比赛方式:分组比赛,每组6个人第一轮分为两个小组,整体按照选手编号进行抽签后顺序演讲。十个评委分别给每名选手打分,去除最高分和最低分,求的平均分为本轮选手的成绩当小组演讲完后,淘汰组内排名最后的三个选手,前三名晋级,进入下一轮的比赛。第二轮为决赛,前三名胜出每轮比赛过后需要显示晋级选手的信息2 程序功能开始演讲比赛:完成整届比赛的流程,每个比原创 2021-09-30 10:20:11 · 171 阅读 · 0 评论 -
STL-常用算法
概述:算法主要是由头文件<algorithm> <functional> <numeric> 组成<algorithm> 是所有STL头文件中最大的一个,范围涉及比较、交换、遍历操作、赋值、修改等等<functional> 体积很小,只包括几个在序列上面进行简单数学运算的模板函数<numeric> 定义了一些模板类,用以声明函数对象1 常用遍历算法1.1 for_each#include <stdio.h&g原创 2021-09-27 11:00:33 · 60 阅读 · 0 评论 -
STL函数对象
1 函数对象1.1 函数对象概念概念:重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数1.2 函数对象使用特点:函数对象在使用是,可以像普遍函数那样调用,可以有参数,可以返回值函数对象超出普通函数的概念,函数对象可以有自己的状态函数对象可以作为参数传递#include <stdio.h>#include <iostream>#include <string&原创 2021-09-25 15:20:45 · 64 阅读 · 0 评论 -
C++多线程基础
1、并发、进程、线程的基本概念并发: 两个或多个独立的活动同时进行进程: 计算机中的程序关于某一数据集合上的一次运行活动(exe的运行状态)线程:1.每一个进程都有一个主线程并且只有一个主线程2. vs编译器中ctr+f5运行程序,实际上是主线程调用main函数的代码3. 线程可以为一个运行代码的通道,路径,我们可以自己创建多个线程并发的实现:1.多线程实现并发主要的问题进程间通信的问题No.1 一个电脑上:管道,文件,消息队列,内存共享No.2 不同电脑通过SOCKET网络通信实现2原创 2021-09-24 11:09:49 · 125 阅读 · 0 评论 -
案例-员工分组
1、案例描述公司今天招聘10个员工(ABCDEFGHI),10名员工进入公司之后,需要指派员工在哪个部分工作员工信息有:姓名 工资组成;部门分为:规划、美术、研发随机给10名员工分配部门和工资通过multimap进行信息的插入key(部门编号) value(员工)分部门显示员工信息2、实现步骤1.创建10名员工,放到vector中2.遍历vector容器,取出每个员工,进行最近分组3.分组后,将员工部门编号作为key,具体员工作为value,放入到multimap容器中4.分部门显示员工原创 2021-09-17 15:49:50 · 155 阅读 · 0 评论 -
map/multimap容器
1、map基本概念简介:map中所有元素都是pairpair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)所有元素都会根据元素的键值自动排序本质:map/multimap属于关联式容器,底层结构是用二叉树实现优点:可以根据key值快速找到value值map和multimap区别:map不允许容器中有重复key值元素multimap允许容器中有重复key值元素2、map构造和赋值功能描述:对map容器进行构造和赋值操作函数原型:构造:map<原创 2021-09-17 15:05:42 · 61 阅读 · 0 评论 -
set/multiset
1 set基本概念简介:所有元素都会在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用二叉树实现set和multiset区别:set不允许容器中有重复的元素multiset允许容器中有重复的元素2 set构造和赋值功能描述:创建set容器以及赋值构造:set<T> st; // 默认构造函数set(const set &st); // 拷贝构造函数赋值:set& operator=(const set &st);原创 2021-09-14 10:59:42 · 156 阅读 · 0 评论 -
list容器
1 list构造函数函数原型list<T> lst; // list采用模板类实现,对象的默认构造形式list(beg,end); // 构造函数将[beg,end)区间中的元素拷贝给本身list(n,elem); // 构造函数将n个elem拷贝给本身list(const list &lst); // 拷贝给构造函数#include <stdio.h>#include <iostream>#include <strin原创 2021-09-12 14:09:15 · 59 阅读 · 0 评论 -
queue常用接口
功能描述:栈容器常用的对外接口构造函数:queue<T> que; // queue采用模板类实现,queue对象的默认构造函数queue(const queue &que); // 拷贝构造函数赋值操作:queue& operator=(const queue &que); // 重载等号操作符数据存取:push(elem); // 往队尾添加元素pop(); // 从队头移除第一个元素back(); // 返回最后原创 2021-09-10 11:17:42 · 138 阅读 · 0 评论 -
stack常用接口
功能描述:栈容器常用的对外接口构造函数:stack<T> stk; // stack采用模板类实现,stack对象的默认构造形式stack(const stack &stk); // 拷贝构造函数赋值操作:stack& operator=(const stack &stk); // 重载等号操作符数据存取:push(elem); // 向栈顶添加元素pop(); // 从栈顶移除第一个元素top(); // 返回栈原创 2021-09-10 10:44:36 · 302 阅读 · 0 评论 -
案例-评委打分
1.案例描述有5名选手:选手ABCDE,10个评委分别对每一名选手打分,去掉最高分,去掉评委中最低分,取平均分。2.实现步骤1.创建5名选手,放到vector中2.遍历vector容器,取出来每一个选手,执行for循环,可以把10个评分打分存到deque容器中3.sort算法对deque容器中分数排序,去除最高分和最低分4.deque容器遍历一遍,累加总分5.获取平均分#include <iostream>#include <vector>#include <原创 2021-08-27 17:14:32 · 258 阅读 · 0 评论 -
deque容器
1.deque容器基本概念功能:双端数组,可以对头段进行插入删除操作deque与vector区别:vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度会比vector快vector访问元素时的速度会比deque快,这和两者内部实现有关deque内部工作原理:deque内部有个中控器,维护每段缓冲区的内容,缓冲区存放真实数据中控器维护的是每个缓冲区的地址,使得使用deque时像一篇连续的内存空间deque容器的迭代器也是支持随机访问的2.原创 2021-08-27 16:32:11 · 75 阅读 · 0 评论 -
vector容器
1.vector基本概念功能:vector数据结构和数组非常相似,也称为单端数组vector与普通数组区别:不同之处在于数组是静态控件,而vector可动态扩展动态扩展:并不是在原空间之后继续新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。...原创 2021-08-27 09:09:27 · 61 阅读 · 0 评论 -
string容器
1.string基本概念本质:string是C++风格的字符串,而string本质上是一个类string和char*的区别:char是一个指针string是一个类,类内部封装了char,管理这个字符串,是一个char*型的容器特点:string类内部封装了很多成员方法string管理char*所分配的内存,不用担心复制越界等,由类内部进行负责2.string构造函数构造函数原型:string(); // 创建一个空的字符串,例如:string str;string(const原创 2021-08-24 13:43:10 · 127 阅读 · 0 评论 -
容器迭代器算法初识
1.vector存放内置数据类型容器: vector算法: for_each迭代器: vector::iterator#include <iostream>#include <vector>#include <algorithm> // 标准算法头文件using namespace std;// vector容器存放内置数据类型void myPrint(int val){ cout << val << endl;}原创 2021-08-23 11:23:06 · 127 阅读 · 0 评论 -
类模板案例
案例描述:实现一个通用的数组类,要求如下:可以对内置数据类型以及自定义数据类型的数据进行存储将数组中的数据存储到堆区构造函数中可以传入数组的容量提供对应的拷贝构造函数以及operator=防止浅拷贝问题提供尾插值法和尾删法对数组进行增加和删除可以通过下标的方式问数组中的元素可以通过获取数组中当前元素个数和数组的容量...原创 2021-08-21 10:46:40 · 45 阅读 · 0 评论 -
C++模板
主要针对C++泛型编程和STL技术做详细讲解,探讨C++更深层作用1、模板的概念模板就是建立通用的磨具,大大提高复用性2、模板函数模板函数作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。语法:template<typename T>函数申明定义解释:template – 声明创建模板typename – 表面其后面的符号是一种数据类型,可以用class代替T – 通用的数据类型,名称可以替换,通常为大小写字母#include&原创 2021-07-30 10:16:22 · 52 阅读 · 0 评论 -
C++职工管理系统
0、需求分析0. 工作人员分类(0)老板(1)员工(2)经理父类:工作人员(Worker)工作人员属性:(1) 职工编号(int m_Id)(2) 职工姓名(string m_Name)(3) 部门编号(int m_DeptId)子类:(1)员工(Employee)(2)老板(Boss)(3)经理(Manager)1. 需求分析(0)退出管理程序:退出当前管理系统(1) 增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门领导(2) 显示原创 2021-07-29 08:56:42 · 330 阅读 · 0 评论 -
C++文本文件
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会释放通过文件可以将数据持久化C++中对文件操作需要包含头文件<fstream>文件类型分两种:1.文本文件 -文件以文本的ASCII码形式存储在计算机中2.二进制文件-文件以文本的二进制形式存储在计算机中,用户一般不直接读懂他们操作文件的三大类:1.ofstream :写操作2.ifstream :读操作3.fstream :读写操作一、文本文件1、写文件写文件步骤如下:1.包含头文件#include<fs原创 2021-07-24 11:08:59 · 234 阅读 · 0 评论 -
C++实现通讯录管理系统
通讯录管理系统由一下模块组成:1、添加联系人2、显示联系人3、删除联系人4、查找联系人5、修改联系人6、清空联系人0、退出通讯录下面分别是不同模块和结构体的实现代码:首先定义两个结构体,分别是用户结构体和通讯录结构体。用户结构体的代码为:struct Person { // 用户结构体 string m_Name; // 姓名 int m_Sex; // 性别:1男 2女 int m_Age; // 年龄 string m_Phone; // 电话 string m_Addr原创 2021-07-15 13:22:44 · 126 阅读 · 0 评论 -
C++继承
在定义某些类的时候,发现下级别的成员除了拥有上一级的存在,还有自己的特性。因此可以使用继承技术,减少重复代码。1、继承的基本语法#include<stdio.h>#include<iostream>#include<string>using namespace std;// 继承实现页面class BasePage {public: void header() { cout << "首页、公开课、登录、注册...(公共头部)" <原创 2021-07-22 14:23:16 · 245 阅读 · 0 评论 -
this指针的用途
#include<stdio.h>#include<iostream>#include<string>using namespace std;class Person {public: Person(int age) { // this指针指向被调用的成员函数所属对象 this->age = age; } Person& PersonAddAge(Person& p) { this->age += p.age;转载 2021-07-20 11:06:18 · 68 阅读 · 0 评论 -
const修饰成员函数
常函数:(1)常函数后加const后我们称这个函数为常函数(2)成员函数不可以修改成员属性(3)成员属性声明时加关键字mutable后,在常函数中依然可以修改常对象:(1)声明对象前加const称该对象为常对象(2)常对象只能调用常函数#include<stdio.h>#include<iostream>#include<string>using namespace std;// 常函数class Person {public: // th转载 2021-07-20 13:00:48 · 54 阅读 · 0 评论 -
静态成员变量
静态成员就是在成员函数前加上关键字static,称为静态成员。静态成员称为:1、静态成员变量(1)所有对象共享同一份数据(2)在编译阶段分配内存(3)类内申明,类外初始化2、静态成员函数(1)所有对象共享同一函数(2)静态成员函数只能访问静态成员变量示例:#include<stdio.h>#include<iostream>#include<string>using namespace std;class Person {public:转载 2021-07-19 13:34:38 · 519 阅读 · 0 评论 -
C++多态
1.多态的基本概念多态是C++面向对象三大特性之一多态分两类静态多态:函数重载和运算符重载属于静态多态,复用函数名动态多态:派生类和虚函数实现运行时多态静态多态和动态多态的区别:静态多态的函数地址早绑定 -编译阶段确定函数地址动态多态的函数地址晚绑定 -运行阶段确定函数地址#include<stdio.h>#include<iostream>#include<string>using namespace std;// 多态// 动物类原创 2021-07-23 14:55:14 · 72 阅读 · 0 评论 -
类对象作为类成员
c++类中的成员可以是另一个类的对象,我们称该成员为对象成员例如:class A{}class B{A a;}B类中有对象A作为成员,A为对象成员示例:#include<stdio.h>#include<iostream>#include<string>using namespace std;class Phone {public: Phone(string pName) { cout << "Phone的构造函数调用"转载 2021-07-19 13:00:53 · 57 阅读 · 0 评论 -
友元-成员函数做友元
#include<stdio.h>#include<iostream>#include<string>using namespace std;class Building;class GoodGay {public: GoodGay(); void visit(); // 让visit函数可以访问Building中私有成员 void visit2(); // 让visit2函数不可以访问Building中私有成员 Building* buildin转载 2021-07-20 14:21:56 · 193 阅读 · 0 评论 -
运算符重载
运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。1、加号运算符重载作用:实现两个自定义数据类型相加的运算#include<stdio.h>#include<iostream>#include<string>using namespace std;// 加号运算符重载class Person {public: // 1、成员函数重载+号 /*Person operator+(Person& p) {转载 2021-07-21 15:28:48 · 61 阅读 · 0 评论 -
空指针访问成员函数
C++中指针也是可以调用成员函数的,但是也要注意有没有用this指针如果用到this指针,需要加以判断保证代码的健壮性。示例:#include<stdio.h>#include<iostream>#include<string>using namespace std;// 空指针调查成员函数class Person {public: void showClassName() { cout << "this is Person cla转载 2021-07-20 12:30:12 · 92 阅读 · 0 评论 -
友元-类做友元
#include<stdio.h>#include<iostream>#include<string>using namespace std;class Building { // GoodGay类是本类的好朋友,可以访问本类中私有的成员 friend class GoodGay;public: Building();public: string m_SittingRoom; // 客厅private: string m_BedRoom; //转载 2021-07-20 13:47:21 · 106 阅读 · 0 评论 -
友元-全局函数做友元
#include<stdio.h>#include<iostream>#include<string>using namespace std;class Building { // goodGay全局函数是Building好朋友,可以访问Building中私有成员 friend void goodGay(Building* building);public: Building() { m_SittingRoom = "客厅"; m_BedRoo转载 2021-07-20 13:18:14 · 72 阅读 · 0 评论 -
构造函数和析构函数
在C++中对象的初始化和清理是两个非常重要的安全问题。一个对象或者变量没有初始化,对其使用的后果是未知的。 同时,使用完一个对象或者变量,没有及时清理,也会造成一定的安全问题。如果不提供构造和析构,编译器会自动提供构造和析构函数的空实现。构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用。析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。构造函数用法:类名(){}1.构造函数,没有返回值也不写void2.函数名称和类名相同3.构造函数可以转载 2021-07-19 10:54:35 · 81 阅读 · 0 评论