
C、C++
幽雨雨幽
C/C++软件工程师
展开
-
2021博客之星,请帮忙投上宝贵一票
投票地址:https://bbs.youkuaiyun.com/topics/603961320原创 2021-12-29 19:28:59 · 287 阅读 · 0 评论 -
zlog
http://hardysimpson.github.io/zlog/UsersGuide-CN.html#htoc33zlog是一个高可靠性、高性能、线程安全、灵活、概念清晰的纯C日志函数库。原创 2021-07-08 10:46:36 · 417 阅读 · 0 评论 -
libevent
官网:https://libevent.org/教程:Programming with Libevent原创 2021-07-02 14:13:24 · 209 阅读 · 0 评论 -
C++11
http://c.biancheng.net/view/7918.html原创 2021-06-01 17:21:04 · 237 阅读 · 0 评论 -
Linux下进程间通信方式——信号量(Semaphore)
https://www.cnblogs.com/wuyepeng/p/9748552.html原创 2021-04-09 15:55:24 · 373 阅读 · 0 评论 -
std::multimap::equal_range
std::pairiterator,iterator> equal_range( const Key& key );(1) std::pairconst_iterator,const_iterator> equal_range( const Key& key ) const;(2) template class K >st原创 2016-09-06 17:00:42 · 2579 阅读 · 0 评论 -
C++编程常见问题—error: passing 'const std::map<>]' discards qualifiers或pass-by-reference-to-const-map导致的“d
产生问题的场景:int func(const map &aMap) { string value = amap[0]; }或者int Test::func()const{ string value = amap[0]; //amap是Test类的成员函数.}用g++编译上面转载 2016-06-23 15:31:05 · 7471 阅读 · 3 评论 -
boost库 数组智能指针scoped_array
学习过C++的开发人员,都知道在C++里数组指针与一般的指针是有区别的。比如使用数组形式分配的内存,就需要使用数组的形式删除。但初学开发的开发人员,往往会忘记这点,在我过去10多年的软件代码审查过程里,经常发现这点,如下面所示:char* pBuf = new char[256];......这里使用delete pBuf; 在最后这行代码上,就使用出错了。应该使转载 2016-07-05 14:21:50 · 811 阅读 · 0 评论 -
C++之TR1::function
Tr1::function的介绍它是一个类模板,类的成员变量是一个函数指针。可以把它看作一个智能函数指针(和shared_ptr智能指针对比着理解)。一. 头文件#include二. 使用view sourceprint?01.//t.cpp02.#include "stdafx.h"03.转载 2016-06-17 15:26:08 · 1249 阅读 · 0 评论 -
STL:transform
/*//////////////////////////////// template OutputIterator transform ( InputIterator first1, // 源容器的起始地址 InputIterator last1, // 源容器的终止地址原创 2016-07-12 11:32:47 · 463 阅读 · 0 评论 -
STL:list用法详解
list容器介绍相对于vector容器的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间。也就是说,对于任何位置的元素插入或删除,list永远是常数时间。常用函数(1) 构造函数list c:创建一个空的listlist c1(c2):复制另一个转载 2016-06-30 14:32:15 · 595 阅读 · 0 评论 -
map/multimap用法详解
multimap 类 标准模板库多重映射类用于存储和检索集合中的数据,此集合中的每个元素均为包含数据值和排序键的元素对。 键值不需要唯一,用于自动排序数据。 可以直接更改多重映射中的元素值,但不能直接更改其关联键值。 必须先删除与旧元素关联的键值,才能插入与新元素关联的新键值。语法template < class Key, class原创 2016-06-30 09:57:55 · 2715 阅读 · 0 评论 -
c++读取txt文件到string
string str_native_json("");FILE* file;long lSize;char* szBuf;file = fopen("native_video.txt", "r+");if(file){fseek(file, 0, SEEK_END);lSize = ftell(file);fseek(file, 0, SEEK_原创 2016-06-23 14:47:52 · 7034 阅读 · 0 评论 -
C++的深拷贝与浅拷贝
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 123456789转载 2016-09-06 21:06:19 · 454 阅读 · 0 评论 -
char* 和char[]的区别
以下内容均来自互联网,系笔者汇总并总结。1. 问题介绍问题引入:在实习过程中发现了一个以前一直默认的错误,同样char *c = "abc"和char c[]="abc",前者改变其内容程序是会崩溃的,而后者完全正确。程序演示:测试环境Devc++代码#include using namespace std;main(){转载 2016-09-21 11:10:00 · 476 阅读 · 0 评论 -
C++不懂的问题
C++不懂的问题1.堆与栈的区别A. 申请方式不同Stack由系统自动分配,而heap需要程序员自己申请,并指明大小。B. 申请后系统的响应不同Stack:只要栈的剩余空间大于申请空间,系统就为程序提供内存,否则将抛出栈溢出异常Heap:当系统收到程序申请时,先遍历操作系统中记录空闲内存地址的链表,寻找第一个大于所申请空间的堆结点,然后将该结点从空间结点链表转载 2015-01-12 19:58:16 · 606 阅读 · 0 评论 -
unsigned a:1;
位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用转载 2017-02-22 17:30:36 · 7610 阅读 · 0 评论 -
C++项目中的extern "C" {}
引言在用C++的项目源码中,经常会不可避免的会看到下面的代码:123456789#ifdef __cplusplusextern "C" {#endif /*...*/ #ifdef __cplusplus}转载 2017-10-09 16:26:01 · 330 阅读 · 0 评论 -
使用 gperf 实现高效的 C/C++ 命令行处理
命令行处理和 gperf 的作用命令行处理一直以来都是软件开发中最容易被忽视的领域。几乎所有比较复杂的软件都具有一些可用的命令行选项。事实上,大量 if-else 语句经常被用来处理用户输入,因此维护这种遗留代码相当费时,对资深程序员亦是如此。这种情形下,很多 C 开发人员通常使用冗长(通常都嵌套使用)的 if-else 语句,以及 ANSI C 库函数,例如 strcmp、strca转载 2017-10-19 11:17:28 · 901 阅读 · 0 评论 -
c++ 虚继承与继承的差异
前面一篇文章,说明了在C++ 虚继承对基类构造函数调用顺序的影响。经过仔细推敲,发现没有彻底说清楚虚继承与普通继承之间的关系。所以用下面的文字再说明一下。首先,重复一下虚拟继承与普通继承的区别有:假设derived 继承自base类,那么derived与base是一种“is a”的关系,即derived类是base类,而反之错误;假设derived 虚继承自base类,转载 2017-10-26 14:33:30 · 2852 阅读 · 0 评论 -
百度笔试题:malloc/free与new/delete的区别
相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内转载 2017-12-12 17:47:56 · 574 阅读 · 0 评论 -
strcpy和memcpy的区别
strcpy和memcpy的区别strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制原创 2018-01-18 14:26:47 · 436 阅读 · 0 评论 -
shared_ptr智能指针源码剖析
前几天有个人问了我一个问题: 如何将一个智能指针作为函数的返回值传递出来。当时这个问题一下子把我问倒了,后来经人提醒有一个叫shared_ptr的智能指针可以解决这个问题。将shared_ptr作为函数返回值的代码是这样的:#include #include using std::tr1::shared_ptr;shared_ptrint> ReturnSharedPtr(转载 2016-05-18 11:05:21 · 622 阅读 · 0 评论 -
auto_ptr
C++的auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理。使用std::auto_ptr,要#include 。[1] 中文名自动指针外文名auto_ptr目录1 代码2 作用代码编辑在C++中, auto_ptr是一个类,它用来实现对动态转载 2016-05-17 16:19:27 · 528 阅读 · 0 评论 -
存储类型auto,static,extern,register的区别
变量和函数的属性包括数据类型和数据的存储类别,存储类别指数据在内存中存储方式(静态和动态),包含auto,static,register,extern四种。内存中。具体点来说内存分为三块:静态区,堆区,栈区。外部变量和全局变量存放在静态区,局部变量存放在栈区,动态开辟的内存存在堆区。 一、简要性比较extern 外部变量声明,是指这是一个已在别的地方定义转载 2016-04-18 19:05:16 · 818 阅读 · 0 评论 -
Undefined Reference to Typeinfo
转载自:http://richardustc.github.io/blog/2013/07/undefined-reference-to-typeinfo/在项目中遇到了这样一个问题:C++文件编译都OK,但链接的时候报错:undefined reference to `typeinfo for xxx’。typeinfo是C++中的RTTI(RunTime Type转载 2015-07-30 16:22:19 · 17259 阅读 · 4 评论 -
加权重随机算法
场景:有N个合作方,每个合作方都有一定的权重,按权重随机选择一个合作方typedef struct{string k;//partner_idstring v;//valuestring m;//0:number 1:ratio}Bookpartner_count_listInfo;string GetRandNumRatio( vector arp原创 2015-07-13 13:45:07 · 2058 阅读 · 0 评论 -
字符串查找和替换接口
int replace_str(std::string& str, const char * oldpart, const char * newpart){int nReplaced= 0;std::string::size_type nIdx= 0;std::string::size_type nOldLen= strlen(oldpart);if ( 0原创 2015-06-12 14:24:15 · 925 阅读 · 0 评论 -
判断目录是否存在并创建mkdir
Linux下mkdir函数头文件库: #include #include 函数原型: int mkdir(const char *pathname, mode_t mode); 函数说明: mkdir()函数以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限。转载 2015-06-11 10:43:09 · 11824 阅读 · 0 评论 -
boost::fast_pool_allocator
Boost库的pool提供了一个内存池分配器,用于管理在一个独立的、大的分配空间里的动态内存分配。Boost库的pool主要适用于快速分配同样大小的内存块,尤其是反复分配和释放同样大小的内存块的情况。使用pool内存池主要有以下两个优点: 1. 能够有效地管理许多小型对象的分配和释放工作,避免了自己去管理内存而产生的内存碎片和效率低下问题。 2. 告别程序内存泄漏的烦恼,pool库会转载 2015-06-10 13:19:34 · 2674 阅读 · 0 评论 -
localtime与localtime_r
在写代码的时候,经常会用到读取系统时间的函数。很多人都会调用localtime函数来将时间转换本地时间,但是大家往往会忽略了一点,localtime函数不是线程安全的。如果在多线程里调用localtime函数,很可能会出现问题。struct tm *localtime(const time_t *clock);这个函数在返回的时候,返回的是一个指针,实际的内存是localtime内转载 2015-06-26 13:50:08 · 1077 阅读 · 0 评论 -
gcc __attribute__关键字举例之visibility
visibility用于设置动态链接库中函数的可见性,将变量或函数设置为hidden,则该符号仅在本so中可见,在其他库中则不可见。g++在编译时,可用参数-fvisibility指定所有符号的可见性(不加此参数时默认外部可见,参考man g++中-fvisibility部分);若需要对特定函数的可见性进行设置,需在代码中使用__attribute__设置visibility属性。原创 2015-06-24 14:33:10 · 1772 阅读 · 0 评论 -
安装boost库
1. 下载boost库 http://www.boost.org/users/download/2. 解压boost_1_58_0.tar.gz 文件 tar -xzvf boost_1_58_0.tar.gz 3. 解压后,进入boost_1_53_0目录,执行:./bootstrap.sh4.执行: ./b25.原创 2015-06-02 13:33:23 · 837 阅读 · 0 评论 -
C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
1.建文件夹int _mkdir(const char *path,mode_t mode);函数名: _mkdir 功 能: 建立一个目录 用 法: int _mkdir( const char *dirname ); 头文件库:direct.h 返回值:创建一个目录,若成功则返回0,否则返回-1==========================转载 2015-05-28 15:38:27 · 990 阅读 · 0 评论 -
Program terminated with signal 11, Segmentation fault.
今天写程序遇到一个问题:Program terminated with signal 11, Segmentation fault.gdb 调试现象如下:warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7fff1b1fc000Core was generated by原创 2015-06-16 15:55:13 · 35253 阅读 · 5 评论 -
warning: control reaches end of non-void function
用gcc编译一个程序的时候出现这样的警告:warning: control reaches end of non-void function它的意思是:控制到达非void函数的结尾。就是说你的一些本应带有返回值的函数到达结尾后可能并没有返回任何值。这时候,最好检查一下是否每个控制流都会有返回值。转载 2015-08-04 13:56:41 · 906 阅读 · 0 评论 -
C++:undefined reference to vtable 原因与解决办法 [转]
最近在写一套基础类库用于SG解包blob字段统计,在写完了所有程序编译时遇到一个郁闷无比的错误: MailBox.o(.text+0x124): In function `CMailBox::CMailBox[not-in-charge](CMmogAnalyseStatManager*)': ../src/MailBox.cpp:27: undefined reference to `C转载 2015-08-06 15:43:43 · 27384 阅读 · 2 评论 -
c/c++比较灵活的方法:回调函数和函数指针
当代码量比较小或者需求固定的时候,可以在一个函数里绑定另一个函数,实现函数互调。但当需要经常改变函数或需要实现动态调用时,绑定的参量就不能实现。这时候需要用到函数指针和函数回调回调函数:回调函数是一个不显式调用的函数,通过将回调函数的地址传给调用者从而实现调用 函数指针:指向函数的指针,可以把函数指针传入另一个函数作为形参,实现回调,首先声明指针 void f();//这是转载 2016-04-17 10:59:35 · 741 阅读 · 0 评论 -
C++封装、继承、多态
C++封装继承多态总结面向对象的三个基本特征面向对象的三个基本特征是:封装、继承、多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!封装转载 2016-04-17 10:31:07 · 403 阅读 · 0 评论 -
C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plain copyint a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。转载 2016-04-16 16:42:51 · 459 阅读 · 0 评论