自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一些数据结构

对于这题的话,需要两个栈才能实现,假设一个是push栈,一个是pop栈,当元素进来的时候进到push栈里边,进栈就往push栈进,若用户此时要弹出,则将push栈的所有元素倒入到pop栈里边,这样最底部的元素就去到了pop的栈顶,再进行pop栈的pop即可弹出元素;若用户再想弹出元素的话,需要注意的前提条件是只要pop栈空的时候才能将push栈的元素倒入,若pop栈还有元素,则直接将pop栈的栈顶弹出即可。同样的,实现栈也是需要两个队列,一个为主队列Queue,用来正常push元素;...

2022-09-01 13:22:31 243

原创 异或运算的相关试题

试题五:一个数组中有一个数出现了K次,其他数都出现了M次,M > 1,K < M,找到出现了K次的数,要求额外空间复杂度O( 1 ) ,时间复杂度O(N)。这时候提取出eor最右边的1,假设最右边为1的下标为index,可以知道a和b下标为index的二进制数形式一个为1,一个为0;这时候将数组里的数分为两类,一个是下标也为index的二进制形式也为1的数,另一种就是为0的数,这样a和b两个数就被分开了;本质就是偶数次的数异或运算的结果为0,奇数次的数异或运算的结果为本身!(因为eor = a ^ b)。.

2022-08-28 14:09:50 417

原创 二分法的应用

最左边的特殊情况:只要下标为0的数比下标为1的数小,即下标为0的数为局部最小;若mid比左边的大,则局部最小值在mid的左边,则可以更新右边界为mid - 1;综上所述,数组在使用二分法的时候一般都要求有序,但在局部最小值的情况下要求无序。首先,二分法应用的前提是,数组要有序,比如下面讲的情况都是从小到大排序的。(局部最小值是指一个数比它相邻的数都小即为局部最小值!若mid下标对应的值刚好为局部最小时,返回该mid值;一般情况下的处理方式:即上述的特殊情况不成立的时候,不同的是这个函数返回的是整型;...

2022-08-26 12:55:49 817

原创 常用的几个算法

一、遍历算法 1、for_each算法 普通函数和仿函数实现遍历操作 #include<iostream> using namespace std; #include<vector> #include<algorithm> //1、普通函数实现遍历操作 //直接传函数名即可 void print01(int a) { cout << a << " "; } void test01() { vector<int>v; f

2021-12-18 14:21:21 297

原创 c++容器合集

1、vector 和数组类似,不同的是vector是动态扩展的。 注意:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间,!!所以每次扩展vector容器的首地址会改变。 实现插入和删除功能要迭代器!! 2、deque 双端数组,可以对头端进行插入删除操作 deque与vector区别: vector对于头部的插入删除效率低,数据量越大,效率越低 deque相对而言,对头部的插入删除速度回比vector快 vector访问元素时的速度会比deque快,

2021-12-17 19:51:26 1481

原创 deque容器

1、deque的插入和删除 插入和删除传参一定要是迭代器!!!!!!! #include<iostream> using namespace std; #include<deque> void printdeque(const deque<int>&d) { for (deque<int>::const_iterator it = d.begin(); it < d.end(); it++) { cout << *it

2021-12-13 21:31:03 903

原创 vector容器

1、构造函数 #include<iostream> using namespace std; #include<vector> void printvector(vector<int>& v) { for (vector<int>::iterator it = v.begin(); it < v.end(); it++) { cout << *it << " "; } cout << endl

2021-12-13 18:40:02 788

原创 STL初始

STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。 算法:各种常用的算法,如sort、find、copy、for_each等 迭代器:扮演了容器与算法之间的胶合剂。初学时可以理解为一个指针。 仿函数:行为类似函数,可作为算法的某种策略。 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。 空间配置器:负责空间的配置与管理。 容器:vector 算法:for_..

2021-12-12 14:20:54 369

原创 11c++多态

1、多态的基本概念 成员函数加上关键字virtual后Animal里多了个指针vfptr,指向vftable,里边储存了Animal& animal的地址。 如果子类重写成员函数,那么复制过来的vftable会储存重写的类,即储存的是Cat& cat的地址。 #include<iostream> using namespace std; class Animal { public: //地址早绑定 在编译阶段确定函数地址 //如果想执行让猫说话,那么这个函数地址就

2021-12-07 15:47:39 512

原创 10c++继承

1、继承语法 class A : public B; A 类称为子类 或 派生类 B 类称为父类 或 基类 2、继承方式 3、继承中的对象模型 #include<iostream> using namespace std; class Base { public: int m_A; protected: int m_B; private: int m_C; }; class Son :public Base { public: int m_D; }; //利用开发

2021-12-05 14:13:56 218

原创 09运算符重载

1、加号运算符重载 #include<iostream> using namespace std; //运算符重载 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //注意,只有自定义地数据类型可以发生运算符重载,内置的数据类型不能发生运算符重载 class Person { public: //1、成员函数重载+号 //Person operator+(Person &p) //{ // Person tmp; // tmp.m_A = this-&

2021-12-04 19:24:00 99

原创 08c++友元

1、全局函数做友元 #include<iostream> using namespace std; class Building { //goodguy全局函数是Building好朋友,可以访问Building里的私有成员 //friend + 函数声明; friend void goodguy(Building* building); public: Building() { m_Bedroom = "卧室"; m_Settingroom = "客厅"; } pub

2021-12-04 09:18:06 206

原创 07c++的对象模型和this指针

1、成员对象和成员函数是分开储存的 #include<iostream> using namespace std; class person { //成员对象 int m_a;//非静态变量 占4个字节即证明是属于类的对象上面的 static int m_b;//执行test02后,发现字节大小还是4个,即证明静态成员变量不属于类的对象上面 //成员函数 void fun1(){}//非静态函数,执行test02后,发现字节大小还是4个,即证明非静态函数变量不属于类的对象上面

2021-12-03 19:11:56 207

原创 06c++类和对象之对象的初始化和清理

1、构造函数和析构函数 #include<iostream> using namespace std; //1、构造函数 进行初始化操作 class person { //1、构造函数 //没有返回值,不用写void /*函数名和类名相同 构造函数可以有参数,可以发生函数重载 创建对象时,构造函数会自动调用,而且只会调用一次*/ public: person() { cout << "函数的调用" << endl; } //2、析构函数

2021-12-02 19:26:54 606

原创 05c++类和对象之封装

1、封装 1)、封装的意义 #include<iostream> using namespace std; const double pi = 3.14; class circle { //访问权限 // 公共权限 public: //属性 // 半径 int m_r; //行为 //一般用函数来表达 double calculate() { return 2 * pi * m_r; } }; int main01() { circle c1; c1

2021-12-01 16:38:12 544

原创 04c++

一、引用:本质就是一个指针常量 1、引用的基本语法 #include<iostream> using namespace std; int main() { int a = 10; //引用语法:数据类型 &别名 = 原名; int& b = a; //引用必须要初始化 //引用在初始化后,不可以改变 cout << "a = " << a << endl; cout << "b = " <<

2021-11-30 19:19:24 764

原创 c++的三个区除代码区外

一、三个区:全局区、栈区、堆区。 1、全局区 #include<iostream> using namespace std; //全局变量 int g_a = 10; int g_b = 10; //const修饰的全局变量 const int c_g_a = 10; const int c_g_b = 10; int main() { //全局区 //全局变量、静态变量、常量 //创建普通局部变量,即函数体里边的变量 int a = 10; int b = 10;

2021-11-30 13:46:08 289

原创 03c++指针

一、函数的分文件编写: 创建后缀名为.h的头文件 创建后缀名为.cpp的源文件 在头文件中写函数的声明 在源文件中写函数的定义 二、指针的定义: int a = 10;//且a有其对应的地址,假设其地址为0x0004; int * p; //定义指针 p = &a; //定义p为a的地址; /*指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用。即*用来访问地址对应的值*/ *p = 100; //通过指针改变a的地址对应的值,即将地址0x0004储.

2021-11-28 20:09:56 240

原创 02c++

1、逆置排序 int arr[] = { 12,34,56,54,89 }; int star = 0; //先定义好数组起始位置 int end = sizeof(arr) / sizeof(arr[0]) - 1 ; //与数组的长度 while (star < end) { int tmp = arr[star]; arr[star] = arr[end]; arr[end] = tmp; ...

2021-11-26 22:24:04 479

原创 敲桌子c++

#include<iostream> using namespace std; int main() { for (int i = 1; i < 101; i++) { if (i == 7 || (i > 10 && i % 10 == 7)) { cout << "敲桌子" << endl; } else if (i % 7 == 0)...

2021-11-25 21:38:07 131

原创 01c++

1、' e '表示的含义 2、char类型 3、转义字符 其中' \t '代表了八个空格,可以整齐地输出数据 4、字符串打印 要包含头文件 : #include<string> 5、布尔类型 只有两个值: true — 真(本质是1) false — 假(本质是0) 6、数据的输入 字符类型: 布尔类型: 只要是不为0的数都为真; 7、当为取余运算符时,已知a<b,则a % b = a 。且除数不能为0. *两个小数不能...

2021-11-25 19:41:50 498

空空如也

空空如也

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

TA关注的人

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