自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 STL——常用集合算法

set_intesection(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest):求两集合交集原容器必须是有序序列 #include <iostream> #include<vector> #include<numeric> #include<algorithm> using namespace std; void myprint(int val)

2021-10-23 13:06:07 86

原创 STL——常用算术生成算法

算数生成算法属于小型算法,使用时包含头文件<numeric>accmulate(iterator beg,iterator end,value):计算容器元素累计总和beg:开始迭代器end:结束迭代器value:起始值 #include <iostream> #include<vector> #include<numeric> using namespace std; void test1() { vector&l

2021-10-23 12:48:03 91

原创 STL——常用拷贝和替换算法

copy(iterator beg,iterator end,iterator dest):容器内指定范围元素拷贝到另一容器中 #include <iostream> #include<vector> #include<algorithm> #include<ctime> using namespace std; void myprint(int val) { cout << val << " "; } v

2021-10-22 14:32:52 78

原创 STL——常用排序算法

sort(iterator beg,iterator end,_pred) #include <iostream> #include<vector> #include<algorithm> using namespace std; void myprint(int val) { cout << val << " "; } //常用排序算法 //sort void test1() { vector<int&g

2021-10-22 14:19:00 63

原创 STL——常用查找算法

常用查找算法find #include <iostream> #include<vector> #include<algorithm> using namespace std; //find算法 //查找内置数据类型 void test1() { vector<int>v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); //.

2021-10-22 13:58:37 73

原创 STL——常用遍历算法

常用遍历算法for_each(iterator beg,iterator end,_func)beg开始迭代器end结束迭代器——func函数或函数对象 #include <iostream> #include<vector> #include<algorithm> using namespace std; //for_each遍历算法 void print(int val) { cout << val <<

2021-10-22 13:58:12 70

原创 STL——内建函数对象

内建函数对象:STL内建了一些函数对象,调用时需引入头文件<functional>算数仿函数:negate,modulus,divide,multiplies,minus,plus #include <iostream> #include<functional> using namespace std; //内建仿函数 //算术仿函数 //除取反操作外都是二元仿函数 void test1() { //negate 取反 一元仿函数 .

2021-10-21 22:25:49 67

原创 STL——谓词

返回bool类型的仿函数称为谓词一元谓词:operator()接受一个参数 #include <iostream> #include<vector> #include<algorithm> using namespace std; //仿函数如果返回类型是bool称为谓词 class greaterfive { public: bool operator()(int val) { return val > 5; } };

2021-10-21 21:49:30 74

原创 STL——函数对象

函数对象:重载函数调用操作符的类,其对象常称为函数对象;函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是类,不是函数函数对象使用:1.在使用时可以像普通函数一样调用,可以有参数和返回值2.函数对象超出普通函数概念,函数对象可以有自己的状态3.可以作为参数传递 #include <iostream> #include<string> #include<vector> #include<map>

2021-10-21 15:31:19 40

原创 STL——map/multimap容器

map中所有元素都是pair所有元素会根据元素中的key值自动排序map和multimap区别:1.map不允许容器中有重复key值元素2.multimap允许容器中有重复key值元素map构造和赋值 #include <iostream> #include<map> using namespace std; void printmap(map<int,int>&m) { for (map<int,int>

2021-10-21 14:34:24 52

原创 STL——pair对组的使用

pair:成对出现的一组数据pair对组的创建 #include <iostream> using namespace std; void printset(const set<int>& l) { for (set<int>::const_iterator it = l.begin(); it != l.end(); it++) { cout << *it << endl; } } //pair

2021-10-20 13:29:30 45

原创 STL——set/multiset容器

set/multiset:所有元素在插入时会自动排序属于关联式容器,底层结构用二叉树实现区别:1.set不允许容器中有重复元素2.multiset允许容器中有重复元素set容器构造和赋值 #include <iostream> #include<set> using namespace std; void printlist(const set<int>& l) { for (set<int>::con

2021-10-20 13:25:47 59

原创 STL——list容器

链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的组成:由一系列结点组成结点的组成:一是存储数据元素的数据域,另一个是存储下一个节点地址的指针域优点:可以对任意位置进行快速插入或删除缺点:遍历速度没有数组快;占用空间比数组大STL中的list是双向循环链表,各个结点储存了前后两个数据的指针,首位记录了尾部指针,尾部记录首位指针由于链表的存储方式不是连续的内存空间,因此链表的迭代器只支持前移后移,属于双向迭代器...

2021-10-20 10:31:50 36

原创 STL——queue容器

queue是一种先进先出的数据结构,有两个接口队尾back只能进数据(push)称为入队;队头front只能出数据(pop),称为出队;queue只有队头和队尾的数据能被访问,因此不能进行遍历行为queue常用接口#include <iostream>#include<queue>using namespace std;class person{public: person(string name, int age) { this->m

2021-10-18 20:02:23 53

原创 STL——stack容器

stack是一种先进后出的数据结构,它只有一个出口数据进去的过程称为入栈(push)出来的过程称为出栈(pop)数据放入时向下堆放,底部叫栈底,顶部叫栈顶,编译器只能访问最上方的数据,因此不能进行遍历操作stack常用接口#include <iostream>#include<stack>using namespace std;//stack常用接口void test1(){ stack<int>s; //入栈 s.push(1

2021-10-18 19:50:26 55

原创 STL容器案例

案例描述:选手ABCDE,10个评委对每个选手打分,去除最高分,去除最低分并取平均值#include <iostream>#include<deque>#include <vector>#include<algorithm>using namespace std;class person{public: person(string name, int score) { this->m_name = name; this-

2021-10-18 19:15:51 60

原创 STL——deque容器

功能:双端数组,可以对头端进行插入删除操作deque与vector区别:1.vector对于头部的插入删除效率低,数据量越大,效率越低2.deque相对而言,对头部的插入删除速度比vector快3.vector访问元素时的速度比deque快,这是因为两者的内部实现不同deque内部工作原理:内部有中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间deque容器的迭代器也是支持随机访问de

2021-10-18 18:22:29 119

原创 文件的读取和写入

程序运行时产生的数据都属于临时数据,程序运行结束后会被释放通过文件可以将数据持久化(可以解决之前通讯录案例的保存问题)C++中对文件操作需要包含头文件< fstream >文件类型分为两种:1、文件文件-文件以文本的ASCII码储存在计算机中2、二进制文件-文件以文本的二进制心事储存在计算机中操作文件的三大类:1、ofstream:写操作2、ifstream:读操作3、fstream:读写操作写文件:#include<iostream&

2021-10-17 21:23:43 172

原创 STL——string容器

最常用容器为vector,可将其理解为数组vector存放内置数据类型#include <iostream>#include<vector>#include<algorithm>using namespace std;//vector容器存放内置数据类型void print(int val){ cout << val << endl;}void test1(){ //创建一个vector容器 vector&lt

2021-10-17 21:22:45 35

原创 STL——vector容器

最常用容器为vector,可将其理解为数组vector容器和数组的区别:数组是静态空间,vector可以动态扩展动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,再将原数据拷贝新空间,释放原空间vector存放内置数据类型#include <iostream>#include<vector>#include<algorithm>using namespace std;//vector容器存放内置数据类型void pri.

2021-10-17 21:22:02 60

原创 STL概述

C++的面向对象和泛型编程思想,目的是提升复用性面向对象的三个特点:继承、多态、封装STL(Standard Template Library)标准模板库STL广义上分为:容器(container)、算法(algorithm)、迭代器(iterator)容器和算法之间通过迭代器进行无缝连接STL六大组件:容器、算法、迭代器、仿函数、适配器、空间配置器迭代器包括:输入迭代器(只读)、输出迭代器(只读)、前向迭代器(读写)、双向迭代器(读写)、随机访问迭代器(读写)...

2021-10-15 18:19:57 28

原创 C++中的文件操作

程序运行时产生的数据都属于临时数据,程序运行结束后会被释放通过文件可以将数据持久化(可以解决之前通讯录案例的保存问题)C++中对文件操作需要包含头文件< fstream >文件类型分为两种:1、文件文件-文件以文本的ASCII码储存在计算机中2、二进制文件-文件以文本的二进制心事储存在计算机中操作文件的三大类:1、ofstream:写操作2、ifstream:读操作3、fstream:读写操作写文件:#include<iostream&

2021-10-15 18:14:35 109

原创 模板的使用

模板:1.模板是一个框架2.模板不是通用的C++其中一种编程思想为泛型编程,主要利用的技术是模板C++提供两种模板:函数模板和类模板函数模板作用:建立通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型代表语法:template<typename T>//函数声明或定义解释:template——声明创建模板typename——表明其后面的符号是一种数据类型,可以用class代替T——通用的数据类型,名称可以替换,通常

2021-10-15 16:29:54 127

原创 C++的多态

多态是C++面向对象三大特性之一分为两类:静态多态:函数重载和运算符重载属于静态多态,复用函数名动态多态:派生类和虚函数实现运行时多态静态多态和动态多态区别:静态多态的函数地址早绑定——编译阶段确定函数地址动态多态的函数地址晚绑定——运行阶段确定函数地址...

2021-08-15 10:59:10 76

原创 类与对象-继承

继承的作用:减少重复代码语法:class 子类:继承方式 父类一般分类的写法#include<iostream>using namespace std;//java页面class java{public: void header() { cout << "首页公开课登录" << endl; } void footer() { cout << "帮助中心交流合作站内地图" << endl; }

2021-08-10 14:57:56 29

原创 运算符重载

对已有的运算符进行重新定义,赋予新功能,以适应不同数据类型1、加号运算符重载 (1)使用成员函数重载+号class person{public: int a; int b; //当系统调用以下函数时,需要person p3=p1.add(p2); person add(person& p) { person temp; temp.a = this->a + p.a; temp.b = this->b + p.b; } //如果...

2021-08-08 20:12:57 41

原创 友元的使用

友元的目的是让一个函数或类 访问另一个类中的私有成员友元关键词为 friend三种实现:1、全局函数作友元class building{ friend void goodfriend(building* building);//加入前缀friend,使该全局函数可以访问building中的私有属性public: building() { sittingroom = "客厅"; bedroom = "卧室"; }public: string sittingroom;

2021-08-07 22:57:00 87

原创 const修饰成员函数

常函数:成员函数后加const称为常函数常函数不能修改成员属性成员属性声明时加关键词mutable后,在常函数中还可以修改常对象:声明对象前加const称为常对象常对象只能调用常函数class person{public: //this指针的本质是指针常量 指针指向不可修改 void showname() const//加入const无法修改属性 //在成员函数后面加const,修饰的是this指针,让this指向的指也不能修改 { //m_age =

2021-08-06 16:15:22 40

原创 空指针访问成员函数

class person{public: void showname() { cout << "this is person" << endl; } void showage() { //报错原因是因为传入的指针为NULL cout << m_age << endl; } int m_age;};//1、用于解决名称冲突void test1(){ person* p = NULL; p->showname(.

2021-08-06 16:03:09 31

原创 this指针的用途

this指针指向被调用的成员函数所属的对象this指针是隐含每个非静态成员函数内的一种指针this指针不需要定义,可以直接使用用途:当形参和成员变量名同名时,可以用this指针来区分在类的非静态成员函数中返回对象本身,可以用 return * this#include<iostream>using namespace std;class person{public: person(int age) { //this指针指向被调用的成员函数所属的对象

2021-08-05 21:09:00 72

原创 成员变量和成员函数分开储存

class person1{};class person2{ int m_a;//非静态成员变量 static int m_b;//静态成员函数,不属于类对象 void func (){}//非静态成员函数,也不属于类对象上static void func2(){}//静态成员函数,不属于类对象上};int person2::m_b = 100;void test1(){ person1 p; //空对象占用内存空间为1 //编译器会给每个空对象分配一个字节空间,是为.

2021-08-05 20:48:28 74

原创 静态成员变量

静态成员变量 1、所有对象共享一份数据2、在编译阶段分配内存(全局区)3、类内声明,类外初始化class person{public: static int m_a;//前缀加入static,类内进行声明 //静态成员变量可以设置访问权限};//类外需要对静态成员变量进行初始化int person::m_a = 100;void test1(){ person p; person p2; p2.m_a = 200;//由于m_a是共享的,因此p中的m_...

2021-08-04 20:00:06 27

原创 类对象作为类成员

类中的成员可以是另一个类的对象,我们称为对象成员B类中有对象A作为成员,A为对象成员class phone{public: phone(string pname) { m_pname = pname; } string m_pname;};class person{public: person(string name, string pname):m_name(name),m_phone(pname) { } string m_name; phone m_pho

2021-08-03 16:43:06 63

原创 初始化列表

class person{public: //传统初始化操作 //person(int a, int b, int c) //{ // m_a=a; // m_b=b; // m_c=c; //} //初始化列表初始化属性 person(int a,int b,int c) :m_a(a), m_b(b), m_c(c) { } int m_a; int m_b; int m_c;};void test1(){ //person p(10, 20,.

2021-08-03 16:26:42 33

原创 深拷贝和浅拷贝

class person{public: person() { cout << "默认构造函数" << endl; } person(int age,int hight) { cout << "有参构造函数" << endl; m_age = age; m_hight = new int(hight);//用m_hight接受堆区数据 } //person(const person& p) //{ // cou.

2021-08-03 12:40:56 45

原创 构造函数调用规则

如果用户定义有参构造,系统不提供无参构造,但会提供默认拷贝构造如果用户定义有参构造,系统不提供其他构造函数class person{public: person() { cout << "默认构造函数" << endl; } person(int age) { cout << "有参构造函数" << endl; m_age = age; } person(const person& p) { cout &l

2021-08-03 12:04:40 30

原创 拷贝构造函数的调用时机

1、使用一个已经创建完毕的对象来初始化一个新对象 2、值传递的方式给函数参数传值3、以值方式返回局部对象class person{public: person() { cout << "默认构造函数" << endl; } person(int age) { cout << "有参构造函数" << endl; m_age = age; } person(const person& p) { cou...

2021-08-03 11:08:01 19

原创 构造函数的分类和调用

分类方式:1、按参数分为:有参构造和无参构造 2、按类型分为:普通构造和拷贝构造三种调用方法:括号法、显示法、隐式转换法#include<iostream>using namespace std;//对象的初始化和清理class person{public: //构造函数 //无参和有参构造 person() { cout << "无参构造函数" << endl; } person(int a) { age = ..

2021-08-02 20:36:03 59

原创 构造函数和析构函数

构造函数:作用在创建对象时为对象的成员属性赋值,构造函数由编译器自动调用、无需手动调用构造函数主要解决对象的初始化问题语法:类名 ( ){ }1、不写返回值和void2、函数名称和类名称相同3、构造函数可以有参数,因此可以发生重载4、程序在调用对象时会自动调用构造,无需手动调用,而且只会调用一次析构函数:作用在对象销毁前系统自动调用析构函数主要解决在对象使用完后的清理问题语法:1、没有返回值,不写void2、函数名和类名相同,在名称前加~3、析构函数不可以

2021-08-02 20:11:27 29

原创 类封装案例2

求圆与点的位置关系class point{public: //设置x void setX(int x) { m_x = x; } //读取x int getX() { return m_x; } //设置y void setY(int y) { m_y = y; } //读取y int getY() { return m_y; }private: int m_x; int m_y;};class circle{public: //

2021-08-01 18:47:30 34

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除