c++
卐兜兜飞卍
如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一、带层次结构、清晰明了的命名准则就是必不可少而且非常好用的工具。
展开
-
十字星递归算法
十字星递归算法(OK,我也不知道这叫什么图形,姑且就叫十字星吧):void shizixing(int starti,int temp,int endi) //starti:起始数字,temp:临时存储终止数字,endi:终止数字{ if(endi>starti) { shizixing(starti,temp,--endi); int si=sta原创 2015-04-21 22:20:22 · 1275 阅读 · 0 评论 -
boost thread warning C4191和algorithm warning C4242
今天抽出时间来整理一下项目中的警告信息,发现有几个警告很神奇,经过一番查证,终于找到了问题所在。第一个警告:boost/thread/win32/thread_primitives.hpp(315): warning C4191: “类型转换”: 从“boost::detail::win32::farproc_t”到“boost::detail::win32::detail::gettickcoun原创 2017-06-16 09:47:23 · 1350 阅读 · 0 评论 -
关于二维数组分配(c/c++)
二维数组在栈上的分配只需要定义声明就可以了,那么如果是动态分配在堆上呢?使用二级指针(指针的指针): int **p = new int *[ROWS]; for(int i=0;i<ROWS;i++) p[i] = new int[COLUMNS];使用指针数组: char* p[ROWS]; for (int i = 0; i<ROWS; i原创 2017-06-06 09:42:07 · 405 阅读 · 0 评论 -
C/C++中 size_t 与C#中类似的类型定义
在c/c++中,关于size_t,通常情况下,32位程序中就是unsigned int,64位中就是unsigned long long。但是如果函数跨语言封装中用到了size_t则是一个不怎么美好的事情了,比如C#中并没有对应的可变类型定义,当然你可以直接用using指明使用那种类型代替size_t,如:#if WIN32 using size_t = System.UI原创 2017-06-07 16:55:05 · 3797 阅读 · 0 评论 -
使用库函数也有系统调用的开销,为什么不直接使用系统调用呢?
《C专家编程》中提到,库函数调用通常比行内展开的代码慢,因为它需要付出函数调用的开销。但系统调用比库的数调用还要慢很多,因为它需要把上下文环境切换到内核模式然后再切换回来。 库函数对文件的操作实际上是通过系统调用来实现的。例如 C库函数 fwrite() 就是通过 write() 系统调用来实现的。但是使用库函数也有系统调用的开销,为什么不直接使用系统调用呢?这是因为,读写文件通常是大量的数据原创 2017-06-12 16:19:21 · 2095 阅读 · 0 评论 -
探寻C++最快的读取文件的方案
在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据。还有人说Pascal的read语句的速度是C/C++中scanf比不上的,C++选手只能干着急。难道C++真的低Pascal一等吗?答案是不言而喻的。一个进阶的方法是把数据一下子读进来,然后再转化字符串,这种方法传说中很不错,但转载 2017-07-13 09:09:04 · 372 阅读 · 0 评论 -
关键字extern,static,const的区别及特点
1.extern的作用extern有两个作用,第一个,当它与”C”一起连用时,如: extern “C” void fun(int a, int b); 则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的, C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的”脾气”了(不同的编译器采用的方转载 2017-07-04 10:48:53 · 696 阅读 · 0 评论 -
补全缺失的64位dll,0xc000007b
今天在win server服务器上部署64位应用程序,运行了下,提示缺少xxx.dll,然后用depends查看缺少哪些dll并在本机查找并将dll复制了上去,依旧不能运行,提示0xc000007b,然后再次使用depends查看,发现复制上去的dll竟然是32位的,但是我明明是在C:\Windows\SysWOW64下复制上去的啊,结果google了一下发现如下文章:===============原创 2017-07-06 17:25:34 · 4929 阅读 · 0 评论 -
LNK2005:htons已经在Win32_Interop.lib(Win32_FDAPI.obj)中定义
今天编译一个项目,在两个头文件中都调用了 winsock2.h,然后出现如题错误, 经过半天查找及网上资料搜索,最终通过https://stackoverflow.com/questions/1372480/c-redefinition-header-files-winsock2-h文中提到的winsock2.h改为调用windows.h的方案解决原创 2017-10-14 17:53:29 · 3563 阅读 · 1 评论 -
boost编译命令
b2.exe stage –toolset=msvc-14.1 address-model=32 –includedir=”.\boost\bin1.66.0\VC14.1\x86” –stagedir=”.\boost\bin1.66.0\VC14.1\x86” threading=multi –build-type=complete –build-dir=”.\boost\boost_1_6...原创 2018-02-26 11:10:01 · 574 阅读 · 0 评论 -
boost 1.66编译
Visual studio 2017 x64: bjam stage –toolset=msvc-14.1 architecture=x86 address-model=32 –stagedir=”E:\Design\Utils\CommonLib\boost\boost_1_66_0\bin\vc141\x64” link=static runtime-link=shared runtim...原创 2018-04-08 11:27:26 · 520 阅读 · 0 评论 -
double的取值范围为什么那么大?
虽然从一开始学编程开始就知道double,float是浮点数,是有精度的,有误差的,但是也就是浅显的认为1.6123271111…的精度对我们来讲只需要到7就结束了,从来没有思考过这个精度具体是指的什么,误差从哪来的?先说一下为什么会想到这个问题吧…今天觉得snprintf/_gcvt不够效率,我想手工做一个double转char*并去除无效0的函数,然后讲double拆为整形部分和小数部分,分别进原创 2017-04-27 15:53:21 · 8207 阅读 · 4 评论 -
mysql-connector-c++-1.1.7 多线程connect崩溃( 0xC0000005)
问题:使用mysql connector (C++)连接mysql数据库,多线程同时connect的时候会直接崩溃 解决办法:两种 第一种:先在主线程中connect一次,之后再并发就没问题了 第二种:对connect过程加锁,毕竟connect并不差加锁的那点时间…原创 2017-05-04 16:09:58 · 1684 阅读 · 0 评论 -
金字塔递归算法
金字塔递归算法:void jzt(int starti,int step,int endi) //starti:起始数字,step:空格数,endi,终止数字{ if(endi>starti) { jzt(starti,step,--endi); for(int i=0;i<step-endi;i++) { p原创 2015-04-21 22:08:13 · 2366 阅读 · 0 评论 -
C++继承练习
C++继承练习 树上对于继承的说明我觉得还不足够细致,自己写段代码对比一下,希望能对同样学习的朋友提供帮助。 引入windows.h主要是为了输出时间,方便对继承关系中函数的执行有个相对直观的了解原创 2015-05-07 10:33:52 · 838 阅读 · 0 评论 -
C++虚继承
C++虚继承概念: Virtual Inheritance 虚继承,解决从不同途径继承来的同名数据成员在内存中不同的数据拷贝导致的数据不一致问题,将共同的基类设置为虚基类。这时从不同路径继承来的数据成员在内存中只有一份拷贝,同名函数也只有一个映射。语法: Class C:virtual public A,virtual public B,…,virtual public n {} 执行顺序原创 2015-05-15 16:46:32 · 789 阅读 · 0 评论 -
字节转换之大小端
今天有个任务是将字节文件转换成整型,我是采用C#的BinaryReader.ReadInt32来直接读取的,运行结果也很顺利,整型结果是1577,但是好奇心驱使我用Ultraedit打开了源文件,但是我发现16进制存储的数组是这样的 这是什么鬼…,读取结果:0x29060000=0*16^0+0*16^1+0*16^2+0*16^3+6*16^4+0*16^5+9*16^6+2*16^7=6882原创 2015-06-17 17:12:03 · 4687 阅读 · 0 评论 -
Vector如何释放内存呢?
vector.clear()只是将所分配的空间size置零,以便新来的元素覆盖旧元素,那么如何真正释放内存地址呢? 可以采用如下办法: vector().swap(v); //此处v为vector变量,申明一个capacity为0的临时变量(无名),然后交换空间,当临时变量出了作用域后内存就自动释放了。PS:当v中存储的为对象时,当释放的时候会自动调用析构函数释放内存,但当v指向一片内存指针的时原创 2015-06-18 23:40:06 · 1969 阅读 · 0 评论 -
Visual Studio 2013引入源文件(CPP)回顾,以FASTDB为例
以Fastdb为例,fastdb 实例中有很多demo可供使用,C++Demo怎么使用嘞…,用visual studio 2013对熟悉的人来说太简单,不熟悉的人来说是千难万难…不说废话了,上步骤… 材料准备: fastdb source:http://www.garret.ru/fastdb.html 工具:Visual Studio 2013打开 fastdb文件夹你会看到有fastdb.原创 2015-08-12 13:32:00 · 2682 阅读 · 0 评论 -
分享下c++字符转换str转wchar_t *或者说是(LPCWSTR)
闲来手打,估计有用//字符转换函数wchar_t * Convert_Wchar(std::string str){ size_t size = str.length(); wchar_t * buffer = new wchar_t[size + 1]; MultiByteToWideChar(CP_ACP, 0, str.c_str(), size, buffer,原创 2015-09-09 13:05:13 · 2072 阅读 · 0 评论 -
Boost使用Thread库
新手,只对新手...今天有个哥们儿问,boost不行了,我说咋了,他说boost我按说明文档上的操作了,可是boost还是提示找不到lib我想不能够啊,去了一看这哥已经玩到thread了...提示缺少libboost_chrono-vc120-mt-gd-1_59.liblibboost_date_time-vc120-mt-gd-1_59.liblibboost_sy原创 2015-09-28 11:19:33 · 1360 阅读 · 0 评论 -
c++线程并发:mutex,atomic,自旋锁spinlock,单线程
自旋锁直接调用了boost库的#include 测试线程并发的情况下耗时,不太明白为什么boost的spinlock效率这么低,还是说boost的spinlock是有其它专业用途...在一个共有资源的情况下,由于任务的简单性,只是++,单线程最快多线程无锁次之,但是结果错误atomic原子操作耗时稍长,但由于原子操作的关系,结果正确mutex 性能损失比较大,为at原创 2015-09-29 17:03:28 · 8704 阅读 · 0 评论 -
Base64的编码简析
所谓Base64,就是说选出64个字符—-小写字母a-z、大写字母A-Z、数字0-9、符号”+”、”/”(再加上作为垫字的”=”,实际上是65个字符)—-作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。 具体来说,转换方式可以分为四步。 第一步,将每三个字节作为一组,一共是24个二进制位。 第二步,将这24个二进制位分为四组,每个组有6个二进制位。 第三步,在每组前面加两个转载 2017-05-03 14:18:03 · 427 阅读 · 0 评论 -
well_known_types_embed.cc文件丢失的问题
在google protocol buffer编译时提示缺失:well_known_types_embed.cc。既然缺失那就补呗…在src\google\protobuf\compiler\js目录下新建well_known_types_embed.cc文件,内容如下:#include <google/protobuf/compiler/js/well_known_types_...原创 2018-08-03 16:18:48 · 545 阅读 · 0 评论