
C/C++
文章平均质量分 68
爱拍凯特
热爱开源,热爱新技术,热爱黑科技。
展开
-
为什么C++函数可以返回局部Vector变量
C++语言中,所有new和malloc创建的变量均存放在堆区,这已经是一个共识。但是鲜为人知的是,STL库中的容器虽没有经过这两个关键字创建,但同样是存放在堆区。这与动态数组性质相同。如果从汇编角度观察便会发现,容器均调用了allocator来创建。这里便不展开多言。在下面的例子中,fun()函数和main()函数中,两个vec的地址并不相同,而首元素的首地址却相同。这就和new创建出的动态数组一样。#include <iostream>#include <vector>原创 2020-12-21 23:24:53 · 3107 阅读 · 0 评论 -
跳跃表C++的一个实现
跳表是一种多层的链表,因为我们知道单链表的查询时间复杂度为接近O(log(n)),这个时间效率接近了平衡二叉树,而效率高些的二叉查找树,平衡二叉树,红黑树的实现相对困难,所以跳表就成为了一种高效且易实现的数据结构。至于具体的解释网上有很多的材料可以参考,下面是我从leetcode上发现的一个比较简单标准的跳跃表的c++实现,代码的优点是简单易懂,缺点是没有做优化,最差的情况下会导致跳跃表降低为单链...原创 2020-02-14 22:16:28 · 256 阅读 · 0 评论 -
C++ 中 重载 覆盖 隐藏 概念的理解
在C++的类中函数定义的时候会有 重载,覆盖(也成为重写),隐藏(也成为重定义)三种情况下面说说他们的区别,以及一些注意事项:学习C++中的类,主要有两种,一种是用struct 关键字 定义的,默认情况下类中的成员是public属性,而另一种使用class 关键字 定义的默认是private属性的。子类在继承的时候会将父类中的public protect private资源原创 2016-05-26 21:31:31 · 837 阅读 · 0 评论 -
C++ 函数 重载 覆盖 隐藏
在C++的类中函数定义的时候会有 重载,覆盖(也成为重写),隐藏(也成为重定义)三种情况下面说说他们的区别,以及一些注意事项:学习C++中的类,主要有两种,一种是用struct 关键字 定义的,默认情况下类中的成员是public属性,而另一种使用class 关键字 定义的默认是private属性的。子类在继承的时候会将父类中的public protect private资源原创 2016-05-27 08:30:23 · 434 阅读 · 0 评论 -
C++ 默认构造函数的重要性
1、默认构造函数C++ 默认构造函数是对类中的参数提供默认值的构造函数,一般情况下,是一个没有参数值的空函数,也可以提供一些的默认值的构造函数,如果用户没有定义构造函数,那么编译器会给类提供一个默认的构造函数,但是只要用户自定义了任意一个构造函数,那么编译器就不会提供默认的构造函数,这种情况下,容易编译报错,所以正确的写法就是用户在定义构造函数的时候,也需要添加一个默认的构造函数,这样就不会造原创 2016-06-12 15:37:23 · 13254 阅读 · 0 评论 -
C++ 存储类的含义和区别
C++中有五种类型的存储类。存储类是管理对象的生存期、链接、内存位置的类型说明符。这些说明符放在需要修饰的变量类型前。autoregisterstaticexternmutable1、说明符的作用是用来定义变量/函数 的范围(可见性)和生命周期。2、以上五类可以分成两种:自动存储类和静态存储类。自动存储类包括auto、register,其他的是静态存储类。3、自原创 2017-01-10 21:43:40 · 3291 阅读 · 0 评论 -
C++的构造函数、初始化方式
一、类的构造函数及其种类当我们自定义一个类的时候,需要创建类的构造函数。1、构造函数的作用:用来初始化对象空间。编译系统在创建类对象的时候,会申请内存空间,然后自动调用类的构造函数,完成对象的初始化操作。2、构造函数的种类:无参数构造函数(没有参数)、一般构造函数(构造函数有多个不同参数,或者参数类型不同)、拷贝构造函数(参数是const类型,且参数为类对象本身的引用),拷贝赋值函数...原创 2019-05-08 11:24:30 · 3893 阅读 · 0 评论 -
C++函数模板和模板函数、类模板和模板类
这期间有涉及到函数模板与模板函数,类模板与模板类的概念 (类似于类与类对象的区别)注意:模板类的函数声明和实现必须都在头文件中完成,不能像普通类那样声明在.h文件中,实现在.cpp文件中。1、函数模板和模板函数函数模板:函数模板的重点是模板。表示的是一个模板,专门用来生产函数。template <typename T>void fun(T a){}模板函数:...原创 2019-05-08 10:03:04 · 1643 阅读 · 0 评论 -
C++智能指针
c++智能指针:auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被c++11弃用。为什么要使用智能指针:智能指针是一个RAII(Resource Acquisition is initialization)类模型,用来动态的分配内存。它提供所有普通指针提供的接口,却很少发生异常。在构造中,它分配内存,当离开作用...原创 2019-07-01 17:40:24 · 137 阅读 · 0 评论 -
遇到的开源库的用法--libcurl
近期在开发一个小项目时候需要用到发送HTTP的请求,这个用Python很容易实现,不过这次代码环境是C++,所以就想用C++写一个发送HTTP请求的代码。需求:需要在一个Post请求中,发送到HTTP服务端几个参数,同时要发送一批图片。在一番调研之后发现用libcurl库可以实现需求,但是在写代码的过程中遇到了一些对curl_formadd API理解的问题,特此写出来以供分享。附上l...原创 2019-08-09 14:28:21 · 1625 阅读 · 0 评论 -
C++容器内存分配特点简介
C++容器内存分配特点:./////////////////////////////////顺序容器//////////////////////////////////////////////Vector:内存申请:vector其中一个特点:内存空间只会增长,不会减小特点:1、由于为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素原创 2016-05-25 10:42:40 · 2002 阅读 · 0 评论 -
惊群问题
惊群问题惊群问题是由于系统中有多个进程在等待同一个资源,当资源可用的时候,系统会唤醒所有或部分处于休眠状态的进程去争抢资源,但是最终只会有一个进程能够成功的响应请求并获得资源,但在这个过程中由于系统要对全部的进程唤醒,导致了需要对这些进程进行不必要的切换,从而会产生系统资源的浪费。 这种情况一般是accept或epoll_create在子进程中处于监听状态,也就是先创建子进程或者子线程原创 2016-05-06 10:54:02 · 5587 阅读 · 0 评论 -
程序的装入和链接
编译—链接---装入 编译:预处理—编译、优化—汇编 链接:静态链接—动态链接1、 静态链接2、 装入时动态链接3、 运行时动态链接 装入:静态装入—动态装入1、 绝对装入方式这种方式在编译的时候就会产生绝对地址(程序中的逻辑地址就是实际的物理地址),在装入的时候不需要对地址和数据进行修改。缺点:只能将目标模块装入内存中指定的位置,不够灵原创 2016-08-07 16:55:09 · 1718 阅读 · 0 评论 -
对动态规划算法思想的一些理解
动态规划算法思想和分治法的思想是类似的,都是将问题的规模缩小,然后求解子问题,根据子问题来解决总问题,但是分治算法的子问题之间是相互独立的,因此在对子问题的求解过程中就产生了很多重复的计算,递归就是这种问题很典型的代表,究其原因就是对子问题的求解过程没有保留中间结果以便其他的求解问题使用,而动态规划问题将中间结果保留在数组中,每个状态都对应一个状态转移,而且动态规划思想和贪心算法思想也不同,就在于原创 2016-05-11 16:28:40 · 1386 阅读 · 0 评论 -
程序编译的几个阶段
程序编译的过程中就是将用户的文本形式的源代码(c/c++)转化成计算机可以直接执行的机器代码的过程。主要经过这么几个过程:1、编译,由编译器将c源代码(.cpp)转变成汇编代码(.s)2、汇编,由汇编器将汇编代码(.s)转变成目标代码(.o)3、链接,由链接器将代码在执行过程用到的其他目标代码和库文件链接成为一个可执行程序也就是目标程序。 详细过程:1、编译编译的过程就原创 2016-05-13 20:40:09 · 4331 阅读 · 0 评论 -
C程序的内存结构和C++程序的内存结构比较
1、C程序的存储空间布局包括以下几个部分:栈:------------栈上分配局部变量堆:------------堆上分配的是用malloc,realloc,calloc分配的变量的内存bss:----------未初始化的全局变量data:---------初始化的全局变量,静态变量正文段:------包括字符串常量和程序代码bss和data合称为全局/静态存原创 2016-06-24 15:37:02 · 459 阅读 · 0 评论 -
被动操作系统扫描软件 p0f 指纹库文件分析
p0f.fp指纹文件分析==============================================一段指纹信息:; ==================; TCP SYN signatures; ==================[tcp:request]; -----; Linux; -----label原创 2016-06-28 16:59:37 · 3237 阅读 · 0 评论 -
C程序的存储空间布局
1、C程序的存储空间布局C程序由以下几个部分构成:1、正文段(代码段)、存储CPU执行的机器指令,这个段可以共享,所以频繁执行的程序在内存中这个段只有一个副本,且这个段通常只读。2、初始化数据段(数据段)、包含了程序中需要明确赋初值的全局变量和静态变量。3、未初始化数据段(bss段)、包含了程序中没有赋初值的全局变量和静态变量。原创 2016-06-13 16:35:31 · 579 阅读 · 0 评论 -
位示图用法的总结
今天在复习的过程中,遇到了海量数据处理问题,这种问题是一种常见的TOP K 问题,处理方法比较固定就是考虑两种情况,一种情况是内存中能够将数据全部存储下来,另一种情况是不能将数据全部存储下来。对于第一种情况,直接采用hash_map进行统计,然后通过堆排序进行建立一个K大小的堆,然后将数据存储到堆里,最终获取Top K。另一种情况的解决方式是先hash分治,然后对每份进行hash_map统计,原创 2016-07-24 19:03:38 · 11622 阅读 · 0 评论 -
select poll epoll系统调用详细分析
1、select,poll,epoll都是多路复用IO的函数,简单说就是在一个线程里,可以同时处理多个文件描述符的读写。select/poll的实现很类似,epoll是从select/poll扩展而来,主要是为了解决select/poll天生的缺陷。epoll在内核版本2.6以上才出现的新的函数,而他们在linux内核中的实现都是十分相似。这三种函数都需要设备驱动提供poll回调函原创 2016-07-02 11:39:16 · 1949 阅读 · 0 评论 -
EPOLL的用法和模型
1、epoll的用法既然epoll是一种IO多路复用技术,也就是管理大量的描述符的,那么这种机制既可以使用在服务端也可以使用在客户端。而在这两种使用方式下可能会有一些差距,但是差距并不大,毕竟作用是相同的。首先说一下epoll中常用的几个函数:int epfd = epoll_create(int size); 这个函数用于创建一个epoll描述符,同时他会创建红黑树原创 2016-05-28 16:45:38 · 638 阅读 · 0 评论 -
EPOLL的理解和深入分析
搞Linux 服务器开发的人肯定了解 select、poll、epoll,他们都是基于事件驱动的IO多路复用技术,而他们之间的区别网上已经有很多的文章了,大家可以去详细的阅读,我在这里主要想写写我对epoll的底层实现的理解。首先还是先说说 select、poll相比与epoll来说他们效率低下的原因吧:select、poll、epoll是Linux平台下的IO多路复用技术,适合用来...原创 2016-05-11 16:44:30 · 10924 阅读 · 10 评论 -
Begin
万事开头难,以前也有过想写博客的想法但是一直没有行动,现在研二刚刚开始,准备称自己的业余时间写写博客,积累并总结一下以前、现在和未来做过的项目和看过的书,以及自己的一些想法。原创 2015-11-08 16:23:53 · 294 阅读 · 0 评论