![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++工程师
sheeper200626
这个作者很懒,什么都没留下…
展开
-
删除链表中倒数第K个节点
这里算法的思路很简单,就是利用双指针进行定位,笔记主要记录的是C++的一些基础知识,也就是关于指针传递的一些知识。bool DeleteListNode(int k, list& List)传入的是链表指针的引用,也就是直接操作实参链表,好处是当需要删除首指针时,可以将链表的head向next赋值即可,如果用bool DeleteListNode1(int k, node* List),在delete List之后,实参指针将指向的是一个被删除的指针,尽管在调用的函数中也进行的next赋值,但是要原创 2020-10-07 21:37:01 · 208 阅读 · 0 评论 -
设计模式:Factory Method
一、工厂方法模式面向接口编程:为了支持未来的变化,需要声明的时候用抽象类而不是具体的类。例:Student* s1 = new Student;//这个是具体的类,不是面向接口的,改为Person* s1 = new Student;//这里Person就是对Student的抽象类,也就是一个接口。小结:当你想到了有很多方法,那么就需要去考虑用一个抽象类将这些方法进行抽象。//如果我们需要写一个分割器,包括:二进制文件分割、文本文件分割、图像文件分割等,那我们就需要抽象一个分割类class IS原创 2020-10-06 14:52:17 · 75 阅读 · 0 评论 -
private与protected控制访问区别
public、private和protected区别基类的派生类的访问权限是public时,派生类不能直接访问基类的private,可以直接访问基类的protected成员数据,所以如果需要使得派生类有访问基类private中的成员数据的话,需要将访问的成员数据放在protected的访问控制符中。...原创 2020-10-06 07:25:15 · 183 阅读 · 0 评论 -
C++:快速取余数幂
注意:python中的^可以表示取幂,但是C++中表示位或运算// CodeJump.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>#include<vector>#include<cmath>using namespace std;long long dfs(long long a, long long b,const unsigned int& mod){ if (b原创 2020-09-20 21:44:14 · 807 阅读 · 0 评论 -
Linux网络编程:send/recv、TCP状态转换
一、send/recvread的替代函数是recv,write的替代函数是send;区别是recv和send多了一个输入参数flags,flags = 0;两种函数一样。二、TCP状态转换循环:起点就是终点。(1)建立连接客户端:起点(CLOSED)—>第一次握手(SYN_SEND)—>第二次握手(ESTABLISHED)服务器端:起点(LISEN)–>SYN_RECV;然后就是通信的过程。(2)断开连接客户端:ESTABLISHED—>第一次挥手(FIN_WA原创 2020-09-20 21:43:03 · 301 阅读 · 0 评论 -
cstring:strcpy、strncpy、strncpy、strncpy_s
一、strcpyDest和Source的长度需要一样大二、strncpy_Count表示Source的长度三、strcpy_s这里是将source中所有的内容都复制到destination中,所以_SizeInBytes==len(_Source);不然会出错,也就是多了不行,少了也不行四、strncpy_s这里要求_MaxCount == _SizeInBytes;//因为在复制完前_MaxCount 个source后会在Destination的第_SizeInBytes中,也就原创 2020-09-15 21:59:26 · 301 阅读 · 0 评论 -
C++:虚析构函数
Q:为什么需要虚析构函数;A:首先,熟悉一些动态联编和静态联编,例子,Employee是Singer的基类,像Employee *pe = new Singer;//这就是动态联编意思是基类类型指针指向派生类类型对象。pe只能用户singer中的Employee中的public部分的数据成员。而静态联编就是Empolyee *pe = new Employee;然后,介绍虚析构函数的作用,为什么需要派生类用虚析构函数,正如动态联编的例子,Employee *pe = new Singer;我们知道在p原创 2020-08-18 12:30:59 · 62 阅读 · 0 评论 -
STL中函数中加入的指针函数怎么写
这是algorithm库中的count_if 函数,需要加入条件pred,而这个函数的应用上就是一个返回bool,并且简单的设定条件就行例如像输出奇数bool pred(int val){ return (val%2)==1;//就是这么简单明了}原创 2020-08-04 15:33:42 · 109 阅读 · 0 评论 -
C++:输入输出
1、笔试题中C++的输入输出通过cin输入,并且用间隔隔开可以读入多个数,用回车可以读入数组或字符串2、字符串string字符串中的添加可以通过string(iterator first,iterator last)进行添加。(1)strcpy不能用于string进行复制。(2)string s3(8, ‘0’);传建一个包含8个元素的string对象,并且所有的元素初始化为0;(注意这里的0不是空格,而是字符串0)(3)string s4(s3);复制构造函数,深拷贝(4)auto firs原创 2020-07-27 20:40:17 · 124 阅读 · 0 评论 -
STL:map
1、RBTree中保存的树结点结构pair<class T1,class T2>{T1 first;T2 second}mep中的iterator指向的就是这种结构体,所以可以通过iterator访问key(first)和value(second)。而插入操作也是插入pair这个结点。上图显示插入的是节点pair<…>& val,注意插入操作中,由于红黑树自身的性质可以自己排好序,所以自动给的节点key插入。emplace可是插入,但是与insert输入形式不同,原创 2020-07-24 21:36:08 · 94 阅读 · 0 评论 -
C++:文字常量区
#include "stdafx.h"#include<iostream>#include<string>using namespace std;void strReverse(char* str);int main(){ char str[] = "I love you,baby!!!";//注意char* str = "I love you,baby!!!";str指向的是文字常量区,不能改变里面的值 //而char str[] = "I love you,b原创 2020-07-23 21:48:09 · 552 阅读 · 0 评论 -
C++:继承及虚函数
1、继承的形式派生类:基类{};例如:B:A{};①派生类 不能直接访问基类的私有成员,必须通过基类方法进行访问(通过A::基类方法())。引申,所以引入了一个访问控制符protected,这个就是为了派生类直接去访问基类的成员数据,其他情况protected与private完全一样。②创建派生类对象时,程序首先穿件基类对象,所以基类对象的构造函数先于派生类调用。派生类构造函数小结:(1)首先创建类对象;(2)派生类构造函数应通过成员初始化列表将基类信息传递给基类构造函数;例如:A(int a,i原创 2020-07-19 16:57:29 · 397 阅读 · 0 评论 -
C++:函数
1、函数原型就是函数的声明2、函数的参数分为形参和实参,两只的功能是作数据传送。一般传递方法有三种:值传递、指针传递、引用传递。引用中,对形参变量的操作就是对其相应的目标对象的操作。注意一个例子:void swap(char*a,char* b){ char* temp = a; a = b; b = temp;}//这个函数并不能改变传入的实参的值int main(){ char* a = 5; char* b = 6; swap(a,b);原因:因为这里传入的是指针,指针也是原创 2020-07-17 16:11:59 · 100 阅读 · 0 评论 -
C++:对象模型:关于vptr(虚指针)和vtbl
虚函数主要是在类继承中的重点,很重要!!!一个类中有虚函数(无论有多少个),就会有一个虚指针。继承:不仅继承数据也会继承函数(是继承调用权而不是内存大小),父类有虚函数那么子类就一定也会有。因为在我们声明类(A)时,里面会有一些成员函数,在我们去实现成员函数(func1())时,我们用作用域操作符::去操作类的成员函数(A::func1()),所以在继承的时候,例如类B:A(B继承A),B中也有函数func1(),但是B中的函数与A中的虽然同名,但是是不同的两个函数,A:func1()和B::func原创 2020-07-16 21:25:26 · 353 阅读 · 0 评论 -
C++:reference(引用)
int main(){ int x = 0; int*p = &x; int& r = x;//r代表x,先在r、x都是0 int x2 = 5; r = x2;//r不能重新代表其他物体,现在r、x都是5,重点 int& r2 = r;//现在r2是5,r2代表r return 0;}reference就是一种漂亮的pointer,变量就是保存的值得内存地址本身。#include "stdafx.h"#include<iostream>原创 2020-07-16 20:34:41 · 483 阅读 · 0 评论 -
C++:三个主题
一、variadic template(数目不定的模板参数)十分重要的知识点。这里讲的就是模板函数中传入的参数为一个和一包。有点像int main(argv,char*[] argv);第一个参数时表示输入的命令个数,第二个则是指针数组,数组中的指针指向的是每一个字符数组。也就是一个命令,例如一个文件路径。以上图像中表示的是通过递归的方式将所有的参数打印出来。边界条件中有一个函数重载中的没有参数的函数,所以就没有语句执行。二、auto用法例子:list<string> c;.原创 2020-07-16 17:30:17 · 199 阅读 · 0 评论 -
C++:标准库(STL)
既然标准库的团队已经设计好了这些库,那么我们就要用起来,最好把所有的算法都测试一遍。就可以做到在以后需要一些算法时可以直接拿来用而不是自己再编写一个程序(也没有库中的算法好啦!!!)...原创 2020-07-16 17:01:04 · 74 阅读 · 0 评论 -
C++:member template 成员模板
语法:template<class T1,class T2>struct pair{ typedef T1 first_type; typedef T2 second_type; T1 first; T2 second; pair() :first(T1()),second(T2()){} pair(const T1& a,constT2& b) :first(a),second(b){} template<class U1,c原创 2020-07-14 16:25:30 · 157 阅读 · 0 评论 -
C++ :namespace经验之谈
为了部门之间写到代码中的变量极易重复,所以每个部门或个人可以设计自己的namespace用来将自己写的代码进行封装。例子:using namespace std;//std这个命名空间中有很多重要的函数或变量名,也就是一个封装,std::cout;可以这样用,所以我们个人加入设计了自己的namespace young,用的时候用young::变量或函数名就行;using namespace std;namespace young{ const int ages = 18;}//我自己的namesp原创 2020-07-14 15:43:46 · 114 阅读 · 0 评论 -
C++:pointer-like classes,智能指针
概念:比指针更加智能的指针,于是变为了class补充:C++中操作符重载很重要,而smart pointer就需要包含指针的和->的操作符,所以就需要重载。以上就显示出一个pointer-like class shared_ptr如何通过操作符重载->和拥有了与一般指针相同的操作。C++语法规定:->操作符重载后,在类对象调用操作符并返回对象后,->任然会作用在后面不会消失。pointer-like classes,关于迭代器背景:在STL中的容器中,一定带迭代器,迭代器原创 2020-07-14 15:38:37 · 175 阅读 · 0 评论 -
C++:转换函数
转换函数分为两种:1、自己定义的类通过转换函数转换为其他类型2、其他类型通过转换函数(类构造函数)转换为自己定义的类形式:1、operator typeName(){};条件:①转换函数必须为类方法②转换函数不能指定返回类型③转换函数不能有参数;例子:#define CONV_FUN_H#include"stdafx.h"#include<iostream>//这里写一个将分数转化为小数的转换函数class Fraction { int m_numerator;//分原创 2020-07-14 15:06:29 · 409 阅读 · 0 评论 -
C++:运算符及优先级
一、cout实现输出其他进制cout<<hex<<i<<endl; //输出十六进制数cout<<oct<<i<<endl; //输出八进制数cout<<dec<<i<<endl; //输出十进制数cout<<bin<<i<<endl; //输出二进制数cout << bitset<10>(a) << endl;// 输原创 2020-07-10 21:01:34 · 202 阅读 · 0 评论 -
C++函数的参数三种传值方式为:值传递、地址传递(指针传递,引用传递)
解释的很清楚小结:传递值不变:(1)值传递(2)指针或引用传递需要加const传递值改变:指针或引用传递注:数据对象是类,需要用引用(&)数据对象是结构,引用和指针都可以用。...转载 2020-06-25 11:20:12 · 234 阅读 · 0 评论 -
对象与类
1、thisthis指针是类方法可以使用的指针(有点像python中的self),它指向用于调用方法的对象,this是对象的地址,this是对象本身。因为类对象实体是通过地址来表示的,例如传参为&对象,所以返回应该为对象本身this.void Move::addMove(const Move& m) { x += m.x; y += m.y;}其实进入这个成员函数后,就进入了对象的this的地址当中,就可以直接用地址中的值。补充:传参时 const string&原创 2020-06-23 11:31:47 · 61 阅读 · 0 评论 -
C++命令行处理技术
#命令提示符中输入命令wc r1 r2 r3int main(int argc,char* argv[])//argc表示输入的命令的个数,argv为指向char的指针数组,// Y2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;int main(int argc,char* argv[]){ for (int i = 0; i < argc; i++原创 2020-06-22 23:21:16 · 360 阅读 · 0 评论 -
职业规划
算法岗与开发算法岗调查开发岗调查两者对比及总结一、 算法岗调查知乎一位相同困扰的老哥根据这位老哥的经历,表示我这个阶段,虽然有一些机器学习和深度学习的基础,但是还是在算法岗位上跃跃欲试,结合在华为HR龙姐的一番建议之下,结论是这些知识在未来的工作中是一定会得到所用,但是企业对于算法的门槛很高,所以我需要认真的剖析一下自己目前的状况,为接下来更好的去努力确定一个方向。在算法岗位的员工,大多数只是从事一些与算法相关的编程工作,也就是代码的工程能力,在算法上研究的并不是特别深入,还是作为项目的搬运工,原创 2020-06-03 18:02:57 · 107 阅读 · 0 评论