自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 n皇后问题

N皇后问题通过递归回溯来实现n皇后的摆放位置,下面是自己实现的代码,思路写在代码注释里,可以详细看看代码。class Solution {public: //标记mark数组 void remark(int x,int y,vector<vector<int>> &mark) { if(x >= mark.size() || y >= mark.size()) { retur

2021-05-14 15:44:27 137

原创 用栈实现简易计算器

#include <iostream>#include<stack>#include<ctype.h>#include<string>#include<cstdlib>#include <algorithm>using namespace std;string SuffixtoIn();void Calculator(const string&);int main(){ Calculator(Suf

2021-05-03 21:15:03 164

原创 类方法、特性和迭代器

类、特性和迭代器self:指向对象本身访问权限私有:__member,在成员属性面前加两个下划线继承issubclass(child,base):确定一个类是否是另一个类的子类,是内置方法bases:特殊属性,可以知道它的基类isinstance(s,SPAMFilter):是否是特定类的实例如果继承多个类,而这些类中有相同的方法,继承时排在前面的类方法会覆盖后面的类方法接口和内省hasattr(tc,‘talk’):知道对象中是否有某个属性,有返回True,没有返回Fal

2021-04-14 19:54:48 516 1

原创 条件、循环和语句

import具体用法:from somemodule import *:导入模块的一切import math as foobar:语句末尾添加as字句可以指定为别名赋值魔法序列解包:将一个序列解包,并将得到的值存储到一系列变量中从字典中随机获取一个键值对,key,value = d.popitem()左右两边的目标个数相同,否则会报错可使用*来收集多余的值:a,b,rest * =[1,2,3,4];rest = [3,4];带星号的变量也可以放在其他位置带星号的变量最终包含的总是一

2021-04-13 22:54:27 84

原创 字典

字典映射:通过名称来访问各个值的数据结构创建字典键与值用冒号分隔,键-值为项,项只用用逗号分隔,整个字典用花括号{}函数dict()可从其他映射或键值序列创建字典基本操作len(d)返回字典d包含的项数d[k]返回与键k相关联的值d[k] = v将值v关联到键kdel d[k]删除键为k的项k in d 检查字典d是否包含键为k的项**键的类型:**任何不可改变的类型,如浮点数、字符串、元组**自动添加:**没有的键也可以赋值,相当于创建新项**成员资格:**k in d

2021-04-13 22:44:36 63

原创 使用字符串

字符串字符串不可变,所有元素赋值和切片赋值都是非法的字符串替代字符串替代可用%转换说明符,来将字符串中的%d,%s替换模板字符串:tmpl = Template(“hello,$who”),tmpl.substitute(who=“Mars”format的使用基本转换format:每个替换字段用花括号括起,其中可能包含名称"{},{}".format(“first”,“second”)使用索引"{1},{0}".format(“first”,“second”),无需

2021-04-12 23:22:58 67

原创 列表和元组

列表和元组序列:列表和元组;映射:字典。列表可以修改,元组不可以一、通用的序列操作列表为:[],元组为:()索引[i]可以使用负数索引,将从右往左数,-1是最后一个元素的位置切片[a:b]使用两个索引,用冒号分隔如果第一个索引指定的元素位于第二个索引指定的元素后面,结果为空序列如果切片结束于序列末尾,可省略第二个索引;复制整个序列,可将两个索引都省略步长可以在两索引之后设置步长,如果步长大于1,将跳过一些元素从整个序列中每隔n个元素提取一个可,[::n+

2021-04-12 20:05:12 86

原创 直接插入排序和希尔排序

一、直接插入排序直接插入排序和希尔排序都为插入排序类,因此将其归类到一块。插入排序是指:将数组当前元素插入到该元素之前的有序序列中,即将数组从头到尾进行遍历,依次将元素插入到前面有序数组中相应的位置而从头到尾开始遍历可以保证遍历到某个元素时前面的数组是有序的具体步骤:从头到尾遍历数组元素然后从当前元素往前遍历有序数组,找到比该元素值还要小的元素数组索引将该索引到当前元素索引之间的数组后移最后将当前元素插入到有序数组中具体的代码:vector<int> InsertS

2021-03-16 21:15:57 473

原创 多端安全协议传输平台

项目简介​ 在学习完c++,系统编程等基础内容以后,就在网上找了关于c++方面的项目,下面这个项目是练手项目之一,一个C/S模型的全栈项目,关于源代码和项目的简介网上不难找到,这里讲述一些我对该项目的理解,和对项目的改进、代码的优化。​ 该项目名为多端安全协议传输平台,它主要是提供为其他通信或者服务提供第三方服务,即保证甲方通信的安全传输。​ 该项目主要实现第三方传输平台客户端和服务端之间如何进行秘钥协商,以及第三方平台对数据信息的注册等。协商完的秘钥能够提供给甲方进行数据加密,甲方只需要一个外联接口

2021-03-15 11:26:05 828

原创 Qt基础内容

基础框架#include <QApplication>//QApplication应用程序类//Qt头文件没有.h//头文件和类名一样int main(int argc, char *argv[]){ //有且只有一个应用程序类的对象 QApplication a(argc, argv); //MyWidget继承于QWidget,QWidget是一个窗口基类 //所以MyWidget也是窗口类 //w就是一个窗口 MyWid

2021-02-14 11:18:31 164

原创 Effective c++

条款01:视c++为一个语言联邦CObject-Oriented C++Template C++STL条款02:尽量以const、enum、inline替换#define宁可以编译器替换预处理器#define ASPECT_RATIO 1.653预处理器会盲目将宏名称ASPECT_RATIO替换为1.653,会导致目标码出现多份1.653用const替换#define的两种特殊情况:定义常量指针由于常量定义式通常放在头文件内,因此有必要将指针声明为const,即指针指

2021-02-11 12:23:06 121 1

原创 快速入门makefile

Makefile​ 在linux系统中我们通常使用gcc等命令来实现一个项目的流程,而Makefile类似于一个shell脚本,通过一系列规则来帮助我们简化项目的编译、链接等操作。可以实现近乎windows上vc++等编译器的功能。工作原理​ 我们可以像在终端中输入命令一样,将命令写在makefile中。依靠简单的依赖原则,makefile会比较文件最后的修改时间来决定是否执行该命令,即​ 工作原理(更新机制):如果被依赖项的更新时间比依赖项新,则会更新被依赖项。例如:#注意,必须要有缩进m

2021-02-10 18:18:47 142

原创 静态库和动态库

静态库和动态库一、静态库​ 静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。 因此调用静态库的可执行文件一般占用内存较大。​ .o文件是静态库最小加载到执行文件代码的最小单位,链接时只会将包含用到函数的.o文件链接进来,并不会链接整个静态库。1.静态库的优缺点优点:发布程序的时候,不需要提供对应的库实现加载库的速度快缺点:库被打包到应用程序中,导致库的体积很大库发生

2021-02-08 22:24:00 564

原创 string容器

string容器​ 在c++中,字符串可以通过类来表示,也便是string容器,它本质上是通过一个类封装了char*指针,然后通过其内部的一些成员函数,能过对该字符串进行一些操作。​ 它具有以下特性:string是一个类,它封装了一个char*指针,然后可以通过内部成员函数,操作该指针指向的字符串string管理char*所分配的内存,每一次string的赋值,都不用担心赋值越界和取值越界at()访问和[]不同,at越界能够抛出异常。s.at(i)和s[i]的区别在于s.at(i)若越界会抛出

2020-12-09 22:33:07 120

原创 vector容器

vector容器​ 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。​ vector容器的概念图:​ 从上图中可以看出,vector是一个单端动态数组,只能从尾部往后定增/删除,不能从头部往前递增/删除。但可以从数组的中间插入数据(可间接实现头插/删)函数的使用构造函数vector(v.begin(),v.end());//将v[begin(

2020-12-09 22:17:21 87

原创 STL基础知识

STL基础知识​ STL的全称是,standard template library,中文译名为标准模板库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。它位于各个 C++ 的头文件中,即它并非以二进制代码的形式提供,而是以源代码的形式提供 。​ 在C++中,STL具体指:容器、算法和迭代器,它借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离特性STL具有以下特性:它将容器和算法之间通过迭代器进行无缝连接

2020-12-09 21:59:56 253

原创 异常处理

异常​ 异常处理允许用户以一种有序的方式管理运行是出现的错误。使用C++的异常处理,用户程序在错误发生时可自动调用一个错误处理程序。异常处理最主要的优点是自动转向错误处理代码,而以前在大程序中这些代码是由“手工”编制的。​ 简单来说异常,是利用代码来代替程序员调试解决程序的出错异常的优点函数的返回值可以忽略,但异常不可忽略。如果程序出现异常,但是没有被捕获,程序就会终止,这多少会促使程序员开发出来的程序更加健壮。而如果没有使用C语言的error宏或者函数返回值,调试者都有可能忘记检查,从而没有对错

2020-12-09 20:48:37 144 1

原创 类型转换

类型转换​ c++通过模板类提供了4中类型转换操作符来应对不同场景static_cast一般转换dynamic_cast通常在积累和派生类之间转换使用const_cast主要针对const的转换reinterpret_cast用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数(1)static_cast​ 它用于非多态类型的转换(静态转换),对应于C中的隐式类型转换,但他不能用于两个不相关类型的转换,如整形和整形指针之间的转换,虽然二者都是四个

2020-12-09 17:40:45 122

原创 函数模板和类模板

函数模板和类模板模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector 或 vector 函数模板模板语法:在创建模板函数或者模板类时,我们需要在前面加上这一句template<typename T>//或者template<class T>templ

2020-12-09 17:27:08 662

原创 多态的注意事项

多态多态的定义:​ 如果有几个似而不完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作。这种情况就是多态现象。​ c++中所谓的多态是指,由继承而产生的相关的不同的类,其对象对同一消息会作出不同的相应。​ 多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。可以减轻系统,升级,维护,调试的工作量和复杂度多态使用注意事项(1)多态的发生有三个必要条件:要有继承要有虚函数重写父类指针或引用指向子类对象(2)如果传参是父类指针,又没有使用v

2020-12-09 15:58:27 383

原创 关于c++继承的一些问题

继承​ 继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。​ 被继承的类称为基类或者是父类;继承的类被称为子类或者是派生类。继承方式​ 继承方式分为三类:公有继承、保护继承、私有继承。三类继承的不同之处,是改变继承成员数据的访问权限公有继承:原来的成员数据访问权限不变保护继承:原来成员数据访问权限private不变;public、protected都变为protected。私有继承:原来成员数据访

2020-12-08 23:16:07 241

原创 c++重载常见问题

重载​ C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载 。​ 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 其次,不会根据返回值不同进行重载函数重载//返回值相同或类似,名字相同;参数列表不同,定义不同void print(int i) { cout << "整数为: " << i << endl;}void print(double f)

2020-12-08 00:11:17 736

原创 友元函数的易错点

友元函数​ 类的友元函数定义在类的外部,虽然它并非成员函数,但通过friend的声明能够使它访问类的私有成员class Integer{public: friend void test(Integer& i);//友元函数声明,位置可以随意,必须在类内private: int val;};void test(Integer &i){ cout<<i.val<<endl;//可以直接访问Integer的私有成员}​ 如果一个

2020-12-07 21:58:13 306 1

原创 全面了解static

static​ static是c/c++中的一个关键字,可以是一个变量、函数的修饰符,被其修饰的变量或者函数将变成静态变量或静态函数。​ static 关键字能够在不破坏了此变量的访问范围下,将此范围内变量的值保存至下一次调用。在 C++ 中,需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见时,可将其定义为静态数据。局部变量​ 当static修饰一个局部变量的时候,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全

2020-12-07 21:15:37 64

原创 深入new和delete

new和delete1.前言​ new和delete是c++在c语言特性上的拓展,功能上与c语言的malloc和free类似,但具体功能上略微有些不同。1.malloc和freemalloc:​ c语言中的malloc()是个函数,函数原型是:void* malloc(unsigned int size) 。​ 它能够动态的从堆里申请内存,具体实现是交给操作系统来实现的。函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的申请时,就会遍历该链表,然后

2020-12-07 20:36:01 129

原创 c++命名空间的使用

命名空间​ c++中,名称可以是符号常量、变量、宏、函数等。为了避免在大规模程序的设计中,以及在程序员使用各种各样的c++库时,这些标识符的命名发生冲突。标准c++引入了关键字namespace(命名空间),能够更好地控制标识符的作用域。​ 此外,std是c++标准命名空间,c++标准程序库中的所有标识符都被定义在std中,比如标准库中的类iostream、vector等都定义在该命名空间中,使用时要加上声明using namespace std,或者using指示(std::string、std::v

2020-12-07 12:15:58 236 1

原创 非递归遍历二叉树实现和理解

非递归遍历二叉树1.前言​ 总所周知,二叉树的遍历分为先序遍历、中序遍历和后序遍历。遍历的顺序不同,则结果不同。而遍历方法也分递归和非递归。而二者的复杂度相同:时间复杂度为O(nlgn),空间复杂度为O(n) 。​ 虽然递归的二叉树逻辑简单,但是通过递归调用可能会浪费多余的栈空间资源,因此非递归遍历也是十分有用的,相比起递归遍历,其会占用更少的栈资源。2.非递归遍历的实现​ 非递归遍历二叉树是通过循环来实现的,在逻辑上相比起递归要稍微复杂一些,需要借用到stack(栈)数据结构。因为遍历时必须根节

2020-12-05 23:17:29 542

原创 c/c++中const的区别

1.前言​ const是construct的缩写,是c/c++语言中的类型限定符,采用const修饰变量,功能是对变量声明为只读特性,并保护变量值以防被修改。​ 但c和c++中的const本质上却有区别。

2020-12-04 21:43:41 721

空空如也

空空如也

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

TA关注的人

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