- 博客(28)
- 资源 (23)
- 收藏
- 关注
原创 vector 二维数组
最近在刷题的时候遇到过好几次二维数组的问题,因为我自己想在C++方向发展,所以尽可能地用C++提供的STL来完成编程,但是在使用二维数组的时候遇到了麻烦,就是如果用int[][]这种直接表示方式很简单,如果用vector的话就有点麻烦,为此我也查了一下资料。 定义一个二维整形数组并初始化:vector<vector<int> > array(m); //这...
2018-06-29 14:21:01 702
原创 go 闭包
package mainimport ( "fmt") func adder() func(int) int { sum := 0 innerfunc := func(x int) int { sum += x return sum } return innerfunc}func main() { pos, neg :=...
2018-06-29 11:17:20 172
原创 go 多线程
goroutine Runtime包中提供了几个与goroutine相关的函数。Gosched()让当前正在执行的goroutine放弃CPU执行权限。调度器安排其他正在等待的线程运行。 请看以下例子:package mainimport ( "runtime" "fmt")func main(){ go sayHello() go sayWorl...
2018-06-29 10:01:56 12167
原创 tcp socket客户端和服务器
1.Socket编程以前使用Socket编程时,一般是如下步骤建立socket,socket 绑定socket,bind 监听,listen 接受连接,accept 接受/发送,recv/sendgo tcp版真的很省事服务端:就是Listen、Accept、Read/Write客户端就是Dial、Read/Write2.Server端packa...
2018-06-28 17:25:30 202
原创 go 判断语句
Go虽然保留了指针,但是与其他编程语言不通的是,在Go当中不支持指针运算以及“->”运算符,而是直接采用“.”选择符来操作指针目标对象的成员。 操作符“&”取变量地址,使用“*”通过指针间接访问目标对象 默认值是nil而非NULLpackage mainimport ( "fmt")func main() { a := 1 var p *...
2018-06-27 22:05:00 1659
原创 linux内存管理问题
一、Linux的虚拟内存管理有几个关键概念1.每个进程有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址 2.虚拟地址可通过每个进程的页表与物理地址进行映射,获得真正物理地址 3.如果虚拟地址对应的物理地址不在物理内存中,则产生缺页中断,并真正分配物理地址,同时更新进程的页表;如果此时物理内存已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。二、Linux进程虚拟地址分...
2018-06-27 10:47:35 260
转载 pthread _cond_wait线程条件等待
通常,和pthread _cond_wait 配对使用的有pthread_cond_signal , 同时还有用于pthread_cond_t初始化的pthread_cond_init,销毁的pthread_cond_destroy函数,还有用于加锁保护的pthread_mutex_lock和pthread_mutex_unlock,稍后会对为什么进行加锁做解释。 初始化条件变量int p...
2018-06-12 16:29:14 19234
转载 so动态库和a静态库的编译
一般linux环境下的链接库分为a库和so库,分别表示静态链接库和动态链接库,其作用是把C程序编译好做成一种可执行链接文件,c主程序文件调用这些程序的函数接口是可以使用a库或so库,在主程序中只需要include含有库中提供的函数接口声明的头文件即可。一、生成a库首先,你需要写几个你要调用的函数的源文件,如test1.c、test2.c等。其代码如下:再将头文件写好(其实这里的头文件并不需要,若是...
2018-06-09 11:32:39 8645
转载 select,poll,epoll
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用...
2018-06-08 15:47:21 167
原创 epoll服务器
epoll同上篇博客中的select一样,都是用于多路转接,但epoll被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 一、epoll相关系统调用epoll只有三个系统调用函数:epoll_create:创建epoll模型epoll_ctl:管理epoll模型epoll_wait:等待I/O时间就绪 events可以是以下几个宏的集合:EPOL...
2018-06-08 11:21:40 428
转载 C++中类成员函数作为回调函数
回调函数是基于C编程的Windows SDK的技术,不是针对C++的,程序员可以将一个C函数直接作为回调函数,但是如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。 普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递一个指向自身的指针给其成员函数从而实现程序函数可以访问C++的数据成员。这也可以理解为什么C++类的多个实例可以共享成员函...
2018-06-06 17:20:48 10354
原创 c++面试题(3)
1.c++编译源程序->预处理->编译和优化->生成目标文件->链接->可执行文件1.预处理1.宏的替换2.删除注释3.处理预处理指令,如#include,#ifdef2.编译和优化词法分析 -- 识别单词,确认词类;比如int i;知道int是一个类型,i是一个关键字以及判断i的名字是否合法语法分析 -- 识别短语和句型的语法属性;语义分析 -- 确认单词、短语和句...
2018-06-05 17:36:35 262
转载 redis入门
首先, 我带大家简单的了解一下RedisRedis常用数据类型(最为常用的数据类型主要有以下五种)●String●Hash●List●Set●Sorted set下面我们先来逐一的分析下这五种数据类型的使用和内部实现方式:1、String常用命令:set,get,decr,incr,mget 等。常用方法:set -- 设置key对应的的值为String类型的valueget -- 获取对应key...
2018-06-04 20:57:28 208
转载 在浏览器中输入 网址 后执行的全部过程
请原谅我把标题中的google.com 改成了 baidu.com——我估计百度应该把我这篇blog推到首页吧:)这仅仅是为了表达对百度的一个吐槽——如果你真以为我是为了SEO虾米的。。。亲,你觉得有这个必要么? O(∩_∩)O 本文试图回答一个古老的面试问题:当你在浏览器中输入google.com并且按下回车之后发生了什么? 不过我们不再局限于平常的回答,而是想办法回答地尽可能具体,不遗漏任...
2018-06-04 17:04:32 21016 2
转载 strcpy函数 和 strstr函数
大家一般认为名不见经传strcpy函数实现不是很难,流行的strcpy函数写法是: char *my_strcpy(char *dst,const char *src) { assert(dst != NULL); assert(src != NULL); char *ret = dst; while((* dst++ = * src+...
2018-06-03 20:55:14 504
原创 深入探索C++对象模型(十一)执行期语义学(临时对象)
关于临时对象的几条准则。1. 在某些情况下,编译器可以产生必要的,或者可以带来方便的临时对象,具体行为由编译器来定义。例如,对于如下操作:[cpp] view plain copyT a, b; T c = a + b;//T operator+ (const T&, const T&) a. 编译器会产生一个临时对象,放置a+b的结果,然后使用T的拷贝构造函数,把临时对象当作...
2018-06-03 18:06:28 277
原创 深入探索C++对象模型(十)执行期语义学(new和delete)
关于new和delete运算符。a. 使用new运算符构造对象时, 例如:[cpp] view plain copyPoint3d* origin = new Point3d; 会被转化为两个操作:分配空间和调用类的构造函数:[cpp] view plain copyPoint3d* origin; if(origin = __new(sizeof(Point3d))) { ori...
2018-06-03 17:49:47 243
原创 深入探索C++对象模型(九) 析构函数 (以及显式定义的析构函数问题、析构函数Rules of Three)
如果类没有定义析构函数,那么只有类中含有成员对象(或者本类的基类)拥有析构函数的情况下,编译器才会合成一个出来,否则析构函数被视为不要,也就不需要合成。例如,如下类,虽然Point类拥有虚函数:[cpp] view plain copyclass Point { piblic: Point(float x = 0.0, float y = 0.0); Point (co...
2018-06-03 17:30:40 1219
原创 深入探索C++对象模型(八) 拷贝构造函数 (浅拷贝问题)
对于默认的拷贝赋值操作符,在如下情况下不会表现出按位拷贝(bitwise copy:关于按位拷贝,实际就是不使用拷贝构造函数或者拷贝赋值操作符,这里的不使用是指编译器根本不会产生,而是采用按位拷贝对象数据的方式,若对象中含有指针,此时的指针只是地址级别的浅拷贝,可能会引起内存问题)(位拷贝就是浅拷贝,值拷贝就是深拷贝) a. 当类内带有一个含有拷贝赋值操作符的成员变量时。 b. 当类的...
2018-06-03 17:16:14 280
原创 深入探索C++对象模型(七) 构造
三个重要函数:构造函数,析构函数,拷贝构造函数。1. 无继承情况下的对象构造。当类中存在虚函数时,编译器会对该类产生膨胀作用, 例如如下类:[cpp] view plain copyclass Point { public: Point(float x = 0.0, float y = 0.0) : _x(x), _y(y){} virtual float ...
2018-06-03 17:08:24 231
原创 深入探索C++对象模型(六) Function语义学
1. 非虚成员函数指针(非静态)。取一个非静态成员函数的地址,如果该函数是非虚函数,则得到的是它在内存中的真正地址,但是该地址并不完全,需要绑定与具体的类实例(对象)之上,借助对象的地址(this指针)才可以被调用,例如:一个成员函数指针[cpp] view plain copydouble (Point::* pmf)(); 经过初始化:[cpp] view plain copydouble ...
2018-06-03 16:38:18 344
原创 深入探索C++对象模型(五) Function语义学
静态成员函数不可以是const的,原因是因为this指针,[cpp] view plain copyclass Test { virtual ~Test(); public: static void StaTest(); }; 如果StaTest()修改为:static void StaTest() const;VS2015中编译回报错误:'StaTest': modi...
2018-06-03 11:15:00 863 1
原创 深入探索C++对象模型-(四)data语义学
1. 在只有继承没有多态的情况下,子类是的内容就是父类加上子类特有的数据成员,例如,对于如下两个类,Point2d和Point3d,后者公有继承自前者,此时的数据布局如下所示:在某些情况下,把一个类分解成多层,可能会导致类所占用空间的膨胀,例如,如下类,算上对齐操作大小为8 (4 + 1 + 1+1 +(1对齐)):而如果相同的数据(val,c1,c2,c3),被分散的放入继承体系之中,现在一个包...
2018-06-03 10:40:44 337
原创 深入探索C++对象模型(三)拷贝构造函数
拷贝构造函数的。1. 有三种情况会以一个对象的内容作为另一个类对象的初始值:a. 明确的以一个对象初始化另一个对象,例如: A a1 = a2;//会调用类A的拷贝构造函数初始化a1。b. 对象被作为参数传递给某个函数时:foo(A a){...}; A a1; foo(a1);//a1作为参数的初值。c. 当传回一个类对象时,A foo() {A a1; return a1;}。 2. 编译器是...
2018-06-02 20:54:48 269
原创 深入探索C++对象模型(二)构造函数语义学
1. 默认构造函数会在需要的时候被编译器产生出来,要注意字眼“需要的时候”,例如如下代码:[cpp] view plain copyclass Bat{ public: int val; Bat* pNext; void bat_yell(); }; void Bat::bat_yell() { Bat batMan; if(batMa...
2018-06-02 20:14:27 595
转载 C++虚函数
众所周知,C++虚函数是一大难点,也是面试过程中必考部分。此次,从虚函数的相关概念、虚函数表、纯虚函数、再到虚继承等等跟虚函数相关部分,做一个比较细致的整理和复习。虚函数OOP的核心思想是多态性(polymorphism)。把具有继承关系的多个类型称为多态类型。引用或指针的静态类型与动态类型不同这一事实正是C++实现多态性的根本。C++ 的多态实现即是通过虚函数。在C++中,基类将类型相关的函数与...
2018-06-02 20:01:25 488
原创 深入探索C++对象模型(一)关于对象
最新在看深入探索C++对象模型(Inside C++ object model),看的同时针对一些之前没有留意或者理解不深的内容整理一下读书笔记,方便之后复习,也希望可以帮助到有同样疑惑的人。下面是第一章的内容整理,注:以下图片来源于原书:关于对象(Object Lessons)1. C++在布局以及存取时间上的额外负担是由virtual引起。这里指的是C++中虚函数以及虚继承机制,虚函数是C++...
2018-06-02 19:36:29 324
原创 矩阵中的路径
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占...
2018-06-02 15:26:57 267
iTOP-4412-LinuxC-摄像头ov5640-500W测试方法.zip
2018-02-04
iTOP-4412内核和Android驱动以及Android测试例程
2018-02-04
python冒泡排序程序
2018-02-04
树莓派摄像头资料和例程
2017-09-01
putty远程连接工具
2017-09-01
Win32DiskImager树莓派写入镜像工具
2017-09-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人