自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

十一分的平庸

哈哈哈哈哈哈哈哈哈

  • 博客(34)
  • 收藏
  • 关注

原创 一个C++空类包含哪些成员函数(运算符)

一个C++空类包含哪些数据(函数、运算符)又是一个在实习面试遇到的题目,自己还是太年轻了,没有看看面经,这里也记录一下:定义一个C++空类:class Empty{};运行过后,编译器会自动地为我们声明一些成员函数:class Empty{public:Empty(); // 缺省构造函数Empty( constEmpty& ); // 拷贝构造函数~Empty(); // 析构函数Empty&operator=( const Empty& ); // 赋

2020-05-24 20:29:18 3200 1

原创 C++强制转换

C++强制转换C++中经常会出现数据的类型转换,例如数组转换为指针,int转换为long,这些都属于隐式转换,更重要的是C++提供了四种强制的显示类型转换:static_cast,dynamic_cast,const_cast和reinterpret_cast。其中dynamic_cast支持运行时类型识别。static_cast任何具有明确定义的转换,只要不包含底层const都可以使用static_cast进行转换:int j = 0;double k = static_cast<do

2020-05-24 20:20:11 234

原创 类的循环问题

类的循环依赖问题面试一个苏州的研究院遇到的提问,当时并不知道咋回事,记录一下。类的循环依赖问题,即A类拥有B类的对象b作为数据成员,B类则有A类的对象作为数据成员。class A{ public: A(); virtual ~A(); protected: private: B b;};class B{ public: B(); virtual ~B(); prote

2020-05-23 09:36:57 879

原创 priority_queue优先队列

priority_queue优先队列小小地记录一下,碰到该数据结构源于剑指offer第41题,求数据流中的中位数。(资料是学习别人的原地址)。队列的性质即先进先出,优先队列则是每个元素都有不同的优先级,即优先级高的先出列,底层的实现实际是一个堆(完全二叉树)。相关操作,和队列基本操作相同: top 访问队头元素 empty 队列是否为空 size 返回队列内元素个数 push 插入元素到队尾 (并排序) emplace 原地构造一个元素并插入队列 pop

2020-05-22 15:01:35 132

原创 类型说明符auto 和类型指示符decltype

类型说明符auto 和类型指示符decltype一、auto当需要将一个表达式的值赋给常量时,可以使用auto说明符,它会让编译器帮我们去推断表达式值的类型。同样也可以使用auto进行声明变量。auto result = val1 + val2;auto i = 0, *p = &i; //trueauto i = 0, pi = 3.15; //false二、decltype有时我们只想知道表达式值的类型,而不用该值去进行初始化,可以用decltype指示符。decltype(f

2020-05-19 22:01:31 148

原创 运行时类型识别RTTI(Run Time Type Identification)

运行时类型识别RTTI(Run Time Type Identification)使用场景:当我们用父类指针或引用执行派生类的操作,并且该操作不是虚函数,则可以使用RTTI。(一般我们会将其声明为虚函数,调用时,系统会根据对象动态类型来确定具体函数的调用)注:使用RTTI风险极大,一般使用虚函数而不是直接管理对象类型。RTTI实现,一般使用以下两个运算符实现:1、typeid:用以返回表达式的类型2、dynamic_cast:用于将基类的指针或引用安全地转换为子类的指针或引用。一、dynamic

2020-05-19 00:02:50 159

原创 ST_String容器

ST_String容器string容器的基本概念:

2020-04-03 21:04:55 113

原创 STL---初识容器算法迭代器

初识容器算法迭代器1、 vector<类型> v 容器2、 尾插 v.push_back3、起始迭代器 v.begin() 指向第一个元素4、结束迭代器 v.end() 指向容器最后一个元素下一个位置5、for_each() 遍历, 引入头文件 algorithm6、练习:内置类型、自定义类型、容器嵌套#include <iostream>#inc...

2020-03-15 10:00:13 111

原创 STL概论

STL概论STL提供了6大组件:容器、算法、迭代器、仿函数、适配器、 空间配置器容器:各种数据结构,如vector,list,deque,set,map等,从实现角度来看,STL容器是一种class template算法:如sort,find,copy,for_each,从实现角度来看则是fuction temlate迭代器:扮演了容器与算法之间的胶合剂,原生指针也是一种迭代器,每个容器...

2020-03-14 22:28:04 109

原创 有序表查找

有序表查找一、二分查找(折半查找)线性表中的数据必须是关键码有序(一般从小到大排列),且线性表必须采用顺序存储。基本思想:将给定值与中间值进行比较,若小于中间值则在左半区继续比较,若大于中间值,则在右半区进行比较,一直重复,直到中间值等于给定值。或者所有查找区域无记录,查找失败为止。int Binary_Search(int * a, int n, int key){ int low ...

2020-03-13 23:43:51 199

原创 查找基本概念和顺序表查找

查找基本概念和顺序表查找基本概念:1、查找表:是由同一元素或记录构成的集合2、关键字:数据元素中某个数据项的值3、主关键字:唯一标识某个记录的关键字4、次关键字:无法唯一标识某个记录的关键字5、静态查找表:只做查找操作的查找表6、动态查找表:对查找表进行插入或者删除操作一、顺序表查找顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术,它的查找过程是:从...

2020-03-13 19:14:11 984

原创 线性表的顺序表示和实现

线性表的顺序表示和实现定义:线性表的顺序表示是指用一组地址连续的存储单元依次存储线性表的数据元素。注:线性表的任一数据元素都可以随机存取,通常用数组来描述数据结构中的顺序存储结构#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量typedef struct { E...

2020-03-10 15:53:20 139

原创 C++成员初始化列表

C++成员初始化列表利用初始化列表进行初始化,可以少调用一次默认构造函数有些情况则必须使用成员初始化列表:1、当类中有常量时,由于常量不能进行赋值,所以只能用成员初始化列表进行初始化2、类中含有引用时,由于引用必须在定义的时候初始化,且不能重新赋值,所以也要放在成员初始化列表中3、当某个类不具有默认构造函数时,使用初始化列表可以不必调用默认构造函数来初始化...

2020-03-09 20:44:47 122

原创 C++ 中 struct 和 class

C++ 中 struct 和 class总的来说,struct 更适合看成是一个数据结构的实现体,class 更适合看成是一个对象的实现体。区别最本质的一个区别就是默认的访问控制 **默认的继承访问权限。struct 是 public 的,class 是 private 的。** **struct 作为数据结构的实现体,它默认的数据访问控制是 public 的,而 class...

2020-03-09 20:30:29 124

原创 C++ assert

C++ assertassert 是断言,宏,而非函数。assert 宏的原型定义在 <assert.h>(C)、<cassert(C++)中,其作用是如果它的条件返回错误,则终止程序执行。可以通过定义 NDEBUG 来关闭 assert,但是需要在源代码的开头,include <assert.h> 之前。#define NDEBUG // 加上...

2020-03-09 20:26:46 105

原创 C++ volatile

volatilevolatile int i = 10; 1、volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素(操作系统、硬件、其它线程等)更改。所以使用 volatile 告诉编译器不应对这样的对象进行优化。2、volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CP...

2020-03-09 17:18:14 75

原创 inline 内联函数

inline 内联函数特征相当于把内联函数里面的内容写在调用内联函数处;相当于不用执行进入函数的步骤,直接执行函数体;相当于宏,却比宏多了类型检查,真正具有函数特性;编译器一般不内联包含循环、递归、switch 等复杂操作的内联函数;在类声明中定义的函数,除了虚函数的其他函数都会自动隐式地当成内联函数。inline 使用// 声明1(加 inline,建议使用)inline i...

2020-03-09 11:39:22 97

原创 C++ this 指针

C++ this 指针this 指针this 指针是一个隐含于每一个非静态成员函数中的特殊指针。它指向调用该成员函数的那个对象。当对一个对象调用成员函数时,编译程序先将对象的地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时,都隐式使用 this 指针。当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。this 指针...

2020-03-09 11:31:40 142

原创 C++ static

C++ staticstatic作用1、修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。2、修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名空间里的函数重名,可以将函数定位为 static。3、修饰成员变量,修饰成...

2020-03-09 11:28:57 90

原创 C++ const

C++ constconst 作用:1、修饰变量,说明该变量不可以被改变;2、修饰指针,分为指向常量的指针和指针常量;3、常量引用,经常用于形参类型,即避免了拷贝,又避免了函数对值的修改;4、修饰成员函数,说明该成员函数内不能修改成员变量。const 使用:// 类class A{private: const int a; // 常对象成...

2020-03-09 09:34:07 74

原创 Socket()函数

Socket()函数#include <sys/socket.h>int socket(int family, int type, int protocol);返回:若成功则为非负描述符(套接字描述符sockfd),若出错则为-1family参数指明协议族(协议域),为下图中所示的某个常值。type参数指明套接字类型,为下图所示的某个常值。protocol 参数则为指...

2020-03-03 11:00:05 112

原创 83. 删除排序链表中的重复元素

83. 删除排序链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。输入: 1->1->2->3->3输出: 1->2->3/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;...

2019-12-05 19:04:23 57

原创 70. 爬楼梯

70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/climbing-stairs著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。方法一:动态规划的思想c...

2019-12-05 11:58:02 80

原创 C++数组形参

C++数组形参数组的两个特性:1、数组不允许拷贝2、使用数组时,通常会将其转换成指针所以,我们无法以按值传递的方式传递数组,但仍然可以把形参写成类似数组的形式void print(const int*);void print(const int[]);void print(const int[10]);int i = 0;int j[2] = {0, 1}print(&...

2019-11-30 23:05:35 158

原创 C++参数传递

C++参数传递1、按值传递:将实参的值拷贝给形参,形参和实参是两个独立的对象,函数对形参进行操作,不影响实参的值。指针形参,void reset(int* p){ *p = 0; //改变指针p所指对象的值 p = 0; //只改变了p的局部拷贝,实参未被改变}调用reset函数后,实参所指的对象的值被改变为0,但是实参本身没有改变2、按引用传递:和其他引用一样,引用形参也是它...

2019-11-30 14:28:52 84

原创 69. x 的平方根

69. x 的平方根实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sqrtx输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。...

2019-11-27 16:41:45 62

原创 win10 下GO语言环境的搭建

win10 下GO语言环境的搭建说明:使用litelde作为编译器1、首先到Go语言官网下载GO语言安装包,根据不同的操作系统选择不同的压缩包。这个是下载链接:golang下载链接,选择直接下载解压,一路next,尽量保证安装路径没有中文。完成后,测试安装是否成功。打开cmd,输入go version,如下图所示则表示安装成功。2、下载LiteIde,这个是下载链接liteide,同...

2019-11-27 15:32:07 533

原创 67. 二进制求和

67. 二进制求和给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。输入: a = “11”, b = “1”输出: “100”输入: a = “1010”, b = “1011”输出: “10101”开始想的是转为int来做,但是总是溢出,后面借鉴的是别人的思想,直接用字符进行加减‘0’ - ‘0’ = 0; 1 + ‘0’ = ‘1...

2019-11-27 01:42:23 76

原创 C++ char与int

C++ char与int今天在写leetcode相关题目时,对这个不了解,做点记录,用以复习char 与 int 其实可以看做是一种类型,字符是以ASCII码的形式存储的,字符之间的比较,实际还是对应的ASCII码的比较(具体可见ASCII表)。简单来说:'1' = 1 + '0';'0' - '0' = 0'2' = '1' - '0' + '1'...

2019-11-27 01:32:08 326

原创 C++ control reaches end of non-void function [-Werror=return-type]

Char 48: error: control reaches end of non-void function [-Werror=return-type]class Solution {public: vector<int> plusOne(vector<int>& digits) { int digitsSize = digits.s...

2019-11-26 13:38:05 1699

原创 LeetCode 66 加一

LeetCode 66 加一问题描述:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/plus-one输入: [1,2,9]输出: [1,3,0]解释: 输入数...

2019-11-26 13:27:40 80

原创 LeetCode 58 最后一个单词的长度

最后一个单词的长度使用尾迭代器,从后向前遍历string,遇到第一个空格开始计数count++,再判断下一个位置的是否是空格,如果是则直接break,跳出循环,否则继续循环。class Solution {public: int lengthOfLastWord(string s) { int count = 0; //记录最后一个单词的长度 for ...

2019-11-25 16:34:19 65

原创 leetcode 53 最大子序和

leetcode 53 最大子序和求任何的最大值和最小值问题时,一定要将最开始的值定义成理论上的最大值和最小值 define INT_MAX 0x7fffffff define INT_MIN 0x80000000思路一:直接暴力法求解利用双循环,在第二个循环里,每次计算一个和值,并且与定义的最大值比较,如果比最大值大,则将最大值置为该和值,在第一个循环里,...

2019-11-25 13:00:50 72

原创 Leetcode 两数之和

Leetcode 两数之和解法一:解法一:可以直接暴力循环两遍,用一个新的vector存储找的下标。class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> val; for (int i ...

2019-10-31 15:17:34 73

空空如也

空空如也

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

TA关注的人

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