自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux环境编程 基于UDP通信协议的回声服务器

套接字(Socket)socket是一种可以进行网络通信的内核对象,它有一个唯一的标识符,一般称它为socket描述符——sockfd,可类比于文件描述符fd,基于Linux下一切皆文件的概念,所以sockfd也可以用read/write/close操作。socket函数:创建socket对象int socket(int domain, int type, int protocol);domain:通信地址类型  AF_UNIX/AF_LOCAL:本地进程间通信  AF_INET:使用ipv

2020-09-25 10:47:57 207

原创 [Linux环境编程] socket网络套接字实现ftp客户端(网络编程)

参考资料:《TCP/IP网络编程》一、基本概念1、socket套接字所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。2、FTP通信协议FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协

2020-09-12 14:58:53 978 3

原创 Linux环境下文件相关的系统调用

系统调用:系统调用就是操作系统提供的一些功能供程序员们调用,这些调用已经被封装成了C函数的形式,但是它们不是标准C的一部分。一般应用程序运行在用户态(使用的是0至3G的内存),系统调用工作在内核态(使用的是3至4G的内存)。常用的标准库函数大部分时间运行在用户态,底层偶尔也会调用系统调用进入内核态。系统调用的代码是内核的一部分,其外部接口以函数定义共享库中(linux-gate.so,ld-linux.so),这些接口的实现利用软中断进入内核态执行真正的系统调用。一切皆文件:UNIX/Linu

2020-10-01 09:06:02 332 1

原创 C++中STL标准模板库的常见容器

STL是Stand Template Library缩写,也标准模板库,由惠普实验室提供。分为以下内容:容器:常用的一些数据结构,可以存放任何数据类型。算法:一些常用的算法,如:查找、排序、比较、交换,拷贝。迭代器:帮助使用容器的工具,使用方式与指针类似。1、迭代器实现了*和->运算符的类对象,也支持++/–运算符,可以方便的遍历、访问、操作容器。正向迭代器:容器类型<类型>::iterator it;使用++运算符,相当于从头尾遍历容器。容器的begin成员函数可以获

2020-09-27 22:15:41 269

原创 C++中的模板及其使用

一、什么是模板模板是C++中自动生成代码的技术,例如我们在C++若想实现一个函数的形参可以是多种数据类型就必须使用重载,模板则可以更加简单方便地实现这一点。二、为什么使用模板假1如我们想实现一个通用的排序算法C语言:通过回调函数实现,使用者调用麻烦。C++语言:函数重载,需要为多种类型实现一个第一版本,还会导致代码段增加。C/C++语言:借助宏函数实现,类型检查不严格,频繁使用还会增加代码段。由于以上原因C++之父在C++中实现了模板技术,既能支持多种类也能兼顾严格的类型检查,能让程序员编程

2020-09-27 21:31:40 1013

原创 C++中的文件流操作

文件流:C++把对文件的操作封装到了类中。ifstream 输入文件流ofstream 输出文件流fstream 输入/输出文件流1、打开文件使用类的构造函数或open成员函数打开文件,它们的参数一样。void open( const char *filename, openmode mode );或ofstream ofs("test.txt");if(ofs.good())//good成员函数用于判断文件是否打开成功{ cout << "文件打开成功" <&l

2020-09-27 21:10:31 431

原创 什么是死锁?如何避免死锁

1、什么是死锁多个进程或线程互相等待对方的资源,在得到新的资源之前不会释放自己的资源,这样就形成了循环等待,这种现象被称为死锁。2、产生死锁的四大必要条件资源互斥:资源只有两种状态,只有可用和不可用两状态,不能同时使用,同一时刻只能被一个进程或线程使用。占有且请求:已经得到资源的进程或线程,继续请求新的资源,并持续占有旧的资源。资源不可剥夺:资源已经分配进程或线程后,不能被其它进程或线程强制性获取,除非资源的占有者主动释放。环路等待:死锁发生时,系统中必定有两个或两个以上的进程或线程组成一条等待

2020-09-25 18:49:46 4507

原创 C++中类的继承

一、类的继承1、在解决问题时,先查看当前现在的类能否解决部分问题,如果可以则把旧的继承后再拓展来缩短解决问题的时间,降低解决问题的难度,继承就是为了让代码能够重复使用。2、当面临一个复杂问题时,可以先把问题进行分层,每层的类解决一部分问题,然后通过继承进行汇总,最终得到一个解决问题的类。二、继承的基本语法1、继承表一个子类可以继承多个父类,每个类的继承方式可以不同。class 子类:继承方式 父类1,继承方式 父类2,... //继承表{}2、继承方式public 公有继承

2020-09-25 09:52:35 432 1

原创 C++中的多重继承、钻石继承和虚继承

多重继承、钻石继承、虚继承1、多重继承在C++中子类可以有多个父类,按照继承表的顺序继承父类中的所有成员,并按照继承表调用父类的构造函数。在子类中按照继承顺序排列父类,并且会标记每个父类的位置。当父类的指针或引用指向子类对象时,编译器会自动计算出父类在子类中的位置。2、钻石继承假如一个子类继承了多个父类,而这多个父类有一个共同的父类,爷爷类中的成员会在孙子类中存在多份,这种继承叫钻石继承。这种继承并不会产生错误,孙子类访问祖先的成员时必须使用 父类名::成员名,重点是这种继承方式会造成冗余浪费

2020-09-25 09:30:11 318

原创 C++运算符重载及友元函数

一、运算符重载C++中是运算符当作函数来看待,所以C++中的运算符可以重载,这样可以让类对象支持运算符,对类对象进行定制化操作。例如:string类就支持很多运算符来代替标准库中的函数。= strcpy+= strlen==|!=|>=|<= strcmp二、双目录运算符重载假如:Test a,b; a+b操作可以调用两种函数Test的成员函数:a是触发者,b是参数Test operator+(cosnt Test& b) const{ return a+

2020-09-25 09:17:17 852

原创 C++类中的静态成员以及单例模式(含常见笔试面试题)

静态成员:类的成员变量可以被static修饰,存储位置由原来的栈或堆变成data或bss,整个程序中只存在一份,被所有的对象共享(静态成员属于类,而不是某个对象)。静态成员变量在类中声明,但必须在类外定义、初始化,与其它在类外的成员函数一样,需要加 类名:: 表示它属于哪个类,但不需要再加static。class Single{ static int a;};int Single::a = 10;静态成员变量虽然在类外定义,但它依然受访问控制符的限制,私有成员和保护成员只能在类内访问

2020-09-24 20:54:06 485

原创 C++类中的拷贝构造和赋值运算符(含常见笔试面试题)

拷贝构造也是一种构造函数,只是参数一个旧的对象,当使用旧对象给新创建的对象初始化时将调用拷贝构造。类名(const 类& that){}默认情况下编译器会自动生成一个拷贝构造函数,该函数负责把旧对象中的数据拷贝给新的对象。深拷贝与浅拷贝:如果类的成员中有指针,在拷贝时只拷贝指针变量,这种叫浅拷贝,这种拷贝分式在旧对象被释放时,该对象的指针变量所指向的内存也被释放。深拷贝是为对象维护一个新的指针,然后将旧对象的指针所向的内容拷贝一份新的给这个指针,这样就不会有上述浅拷贝存在的问题,但

2020-09-24 20:30:47 266

原创 C++类中的this指针与常函数

this指针:指向访问成员函数对象的指针,默认是隐藏的,但也可以显示使用。对象调用成员函数时会自动计算它的内存地址传递给成员函数中的this,而在成员函数调用其它成员函数,会把对象的地址接力传递下去。构造函数中也有this指针,指向这个正在构造的对象,原因是构造函数执行前对象所需的内存就已经分配完毕,执行构造函数的目的是为了申请其它资源、做一些准备工作,对指针成员分配内存。this指针的用法:1、函数参数与成员变量重名,参数会屏蔽成员变量,可以通过this指针访问成员变量。class Test{

2020-09-24 19:55:46 309

原创 C++中什么是类

一、面向对象与面向过程:面向过程:关注解决问题的步骤,算法。面向对象:关注的是谁能解决问题,需要什么样的数据(成员变量),具备什么样的功能(成员函数)。抽象:类是对象的抽象,而对象是类的具体化,而要使用类的功能,具体就要先定义一个对象封装:隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互,将数据和操作数据的方法进行有机结合。继承:继承是指这样一种能力,它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。其继承的过程,就是从一般到特殊的过程,它是类与类之间的一种关系

2020-09-23 17:19:15 5954

原创 C和C++的区别(含常见笔试面试题)

一、第一个C++程序1、文件扩展名 .cpp .cc .C .cxx2、编译器 g++ 大多数系统需要额外安装,ubuntu系统下的安装命令: sudo apt-get update sudo apt-get install g++ gcc也可以继续使用但需要增加参数 -xC++ -lstdc++3、头文件 #include <iostream> #include <stdio.h> 可以继续使用 #include <cstdio> 也可以使用

2020-09-23 16:37:38 490

原创 剑指offer 刷题笔记JZ11 二进制中1的个数

class Solution {public: int NumberOf1(int n) { int ans = 0; while (n != 0) { ++ans; n = n & (n-1); } return ans; }};举例:11101000 & 11100111 得11100000,与原数相比最后一位1被置为0,利用这

2020-09-13 23:15:24 118

原创 剑指offer 刷题笔记JZ10矩形覆盖

class Solution {public: void _rectcover(int rec,int goal,int* count) { if(rec > goal) return; if(rec == goal) { (*count)++; return; } _rectcover(rec+1,goal,count); _r

2020-09-13 22:41:15 101

原创 剑指offer 刷题笔记JZ9变态跳台阶

class Solution {public: void _jumpfloor(int rec,int goal,int* count){ if(rec > goal) return; if(rec == goal) { *count = *count+1; return; } for(int i=1;i<=goal;i++) {

2020-09-12 15:58:32 99

原创 剑指offer 刷题笔记JZ8跳台阶

递归入门题void _jumpfloor(int rec,int goal,int* count){ if(rec > goal) return; if(rec == goal) { *count = *count+1; return; } _jumpfloor(rec+1,goal,count); _jumpfloor(rec+2,goal,count);}int jumpFloor(int number )

2020-09-12 15:43:11 81

原创 剑指offer 刷题笔记JZ7斐波那契数列

非常经典的入门题循环:class Solution {public: int Fibonacci(int n) { int a=0,b=1,temp; for(int i=0;i<n;i++) { b=a+b; a=b-a; } return a; }};递归class Solution {public: in

2020-09-12 15:36:45 113

原创 [Linux网络编程] 网络通信 学习笔记

仅用于学习网络通信的笔记

2020-09-11 11:59:15 120

原创 剑指offer 刷题笔记JZ3从尾到头打印链表

简单题链表中的节点只有指向下一节点的指针,那么怎么简单快速地实现反向遍历呢,递归思想可以巧妙地解决这一问题,且代码实现起来较为简单。class Solution {public: vector<int> a; void _list(ListNode* head) { if(NULL == head) return; _list(head->next); a.push_back(head-&gt

2020-09-09 21:43:23 92

原创 剑指offer 刷题笔记JZ2替换空格

简单题这是一道简单的字符串题,考验的是对字符串最基本的操作。class Solution {public: void replaceSpace(char *str,int length) { char temp[100] = {}; while(*str) { if(*str == ' ') { strcpy(temp,str+1); str

2020-09-09 21:03:46 134

空空如也

空空如也

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

TA关注的人

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