
C/C++
文章平均质量分 61
Parle
这个作者很懒,什么都没留下…
展开
-
排列组合算法
排列和组合是两种不同的算法,排列所求的k个数,数的排序不同则为一种不同情况,总共有k!中可能情况求全排列最常用的算法就是按照字典式排序(STL),字典式排序从第一位开始找最小的数,然后依次找每一位能够存在的最小的数(和已存在的排列不重复),主要步骤如下(以123456为例):第一个数是每一位能取到的最小的数,也就是123456从第二个数开始就按照以下算法来寻找: 在上一个排列中, 找到最后一个原创 2016-10-21 13:45:41 · 1893 阅读 · 1 评论 -
某厂几道C/C++面试题
说来惭愧,时间紧急,没有准备,唉,自作孽……1. 如何快速判断一个unsigned int是不是2的n次方最快解法思路: return a&(a-1)2. 给定结构体中一个成员的地址,求结构体的首地址这是Linux内核代码中用的一个函数或者说方法,之前从未接触过,所有有点懵逼…..具体定义如下: #define list_entry(ptr, type, member) ((type *)(原创 2016-06-23 00:04:08 · 636 阅读 · 0 评论 -
C/C++中static和extern小结
static和extern是C/C++中和函数的声明有关的两个关键字,特别是涉及到全局变量时,所以做此总结。1. static关键字1.1 函数和变量声明(C/C++)static全局变量:当声明一个static全局变量,则表示静态全局变量,和其他变量一样,存放在.data(初始化了)或者.bss(未初始化)内,但只在定义它的源文件中有效,其余文件无法访问它。 static局部变量:具有以下特原创 2016-07-02 17:05:13 · 2245 阅读 · 0 评论 -
C++中operator<<运算符重载注意事项
我们在定义一个类的时候,为了使用方便,希望通过<<打印类的相关信息,需要重载<<运算符一般运算符重载都设计为类的member function,但是operator<<却不能这样设计,Essential C++中解释如下: 为什么不把output运算符设计为一个member function呢?因为作为一个member function,其左侧操作数必须是隶属同一个class之下的对象,如果ou原创 2016-07-24 11:33:33 · 3691 阅读 · 0 评论 -
C/C++中的类型转换
从c转向c++时,类型转换出现了一些疑惑,查阅了一些资料和博文,整理如下。1. 隐式类型转换这类转换主要发生在类型不同的赋值和计算过程中,C/C++中均存在int ival = 3;double dval = 3.124;ival + dval //ival被提升为double类型int *p = 0; // 0被转换为了int* 类型ival = dval; // dval被转换为了int类原创 2016-06-28 20:34:06 · 495 阅读 · 0 评论 -
图说C++对象模型:对象内存布局详解
图说C++对象模型:对象内存布局详解1. 前言文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局、虚表指针、虚基类指针等有深入了解的朋友可以慢慢看。 本文的结论都在VS2013上得到验证。不同的编译器在内存布局的细节上可能有所不同。 文章如果有解释不清、解释不通或疏漏的地方,恳请指出。2. 何为C++对象模型?引用《深度探索C++对象模型》这本书中的话: 有两个概念可以解释C转载 2016-06-07 19:17:45 · 938 阅读 · 0 评论 -
VS2012运行opencv程序时缺少MSVCP120D.dll
首先声明,看清题目,是VS2012(或更低版本),缺少的是MSVCP120D.dll,至于原因,后面说。当然,其余的VS和缺少其余的dll也可以参考1. 问题原因这个很重要,很多网上的解决方案都是找个vcredist_x86之类的C++运行库安装一下,有的还直接下载MSVCP120D.dll,将其拖入系统文件夹再进行regsvr32命令操作之类的.....这些方案至少对于我的问题是原创 2016-04-13 11:13:01 · 8254 阅读 · 0 评论 -
C++中sizeof用法总结
1. sizeof 简介sizeof是一个关键字,不是一个函数,其作用是返回一个对象或者类型所占的内存字节数。MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This ke原创 2016-05-15 11:10:42 · 1243 阅读 · 0 评论 -
漫谈C++:良好的编程习惯与编程要点
以良好的方式编写C++ class假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯。① Header(头文件)中的防卫式声明complex.h:# ifndef __COMPLEX__# define __COMPLEX__class complex{ }# endif防止头文件的内容被多次包含。转载 2016-05-25 09:00:18 · 657 阅读 · 0 评论 -
C++虚函数声明和定义以及g++编译遇到的一些问题
遇到了一些麻烦的,记录下来作为教训…..1. 虚函数的声明和定义具体关于虚函数的知识不做多讲,我在定义一个抽象类时,忘了将一个虚函数声明为 纯虚函数,又没有对其定义, 导致编译报错时报错如下:undefined reference to `vtable for Fibonacci'错误提示的很明显,就是无法生成虚函数表。我们知道,虚函数表(地址)在定义了虚函数的类所实例化的对象内存中的第一个位置,也原创 2016-07-19 12:47:13 · 5068 阅读 · 0 评论 -
C++模板定义和实现分离导致的编译错误
今天在实现一个二叉树的时候,用到了模板,没在意,和平时一样写了两个文件:BinaryTree.h,BinaryTree.cpp。思路和平时一样,h文件中定义了模板类,然后在cpp文件中实现了一些功能函数。然后在test.cpp中测试,遇到了一些问题、问题出现如下:使用g++直接编译的时候提示,基本上都是undefined reference to错误:test_binarytree.cpp:(.原创 2016-07-21 20:59:07 · 1677 阅读 · 0 评论 -
GCC编译器一些参数区别(-I -l -L)
我们用gcc编译程序时,常常会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录:例:gcc -o hello hello.c -I/home/hello/include -L/home/hello/lib -lworld上面这句表示在编译hello.c时:-I /home/hello/include,表示将/home/hello/include目录作原创 2016-09-07 10:26:24 · 16509 阅读 · 0 评论 -
导出函数__declspec(dllexport)
一般而言,动态链接库中定义有两种函数:导出函数(export function)和内部函数(internal function)。 导出函数可以被其它模块调用,内部函数在定义它们的DLL程序内部使用。 在要输出的函数、类、数据的声明前加上__declspec(dllexport)的修饰符,表示输出。有导出就有导入__declspec(dllimport),声明某个类、函数是从dll中导入原创 2016-08-14 14:12:26 · 15739 阅读 · 0 评论 -
C++类成员函数转换成函数对象
C++中,类的成员函数(member_function)通常不能直接作为函数对象来使用,最常见的就是创建线程时,不能使用非静态的成员函数来初始化一个线程。这个主要是因为没有传入this指针,而下面的转换或者绑定,本质是将类对象指针传入或者说绑定到参数上C++提供这方面的转换方式,最常用的就是mem_fn(since C++11)和bind 更多关于函数适配器的说明和用法,请参考这篇博文me原创 2016-09-15 19:39:27 · 3419 阅读 · 0 评论 -
C++11并发/多线程编程系列(3)
转自:http://www.cnblogs.com/haippy/p/3237213.htmlstd::mutex 详解Mutex 又称互斥量,C++ 11中与 Mutex 相关的类(包括锁类型)和函数都声明在 <mutex> 头文件中,所以如果你需要使用 std::mutex,就必须包含 <mutex>头文件。 pthread下有pthread_mutex<mutex> 头文件介绍Mute转载 2016-09-14 18:25:05 · 1595 阅读 · 0 评论 -
C++11并发/多线程编程系列(2)
转自http://www.cnblogs.com/haippy/p/3236136.htmlstd::thread详解std::thread在头文件<thread>中声明,因此使用 std::thread 时需要包含 <thread>头文件。 default(1) thread() noexcept; initialization (2) template <class Fn, cl转载 2016-09-14 17:28:36 · 1231 阅读 · 0 评论 -
C++11并发/多线程编程系列(1)
转自:http://www.cnblogs.com/haippy/p/3235560.html1. 与 C++11 多线程相关的头文件C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是<atomic>, <thread>, <mutex>, <condition_variable>, <future><atomic>:该头文主要声明了两个类, std::atomic 和 std::转载 2016-09-14 16:58:43 · 1122 阅读 · 0 评论 -
C++之STL查找
本文是对STL中常用的查找算法做个小结。可供查找的算法大致有:count:计算对象区间中的数目find:返回第一个对象的位置binary_search:判断是否存在某个对象lower_bound:返回等于或者大于指定对象的第一个位置upper_bound:返回大于对象的第一个位置equal_range:返回等于指定对象的元素的区间位置(构成一个pair)这些查找算法需要序列式容器,或者原创 2016-08-02 18:46:31 · 1209 阅读 · 0 评论 -
C++ int和string相互转换
别管什么效率了,先挑最简单用着int转stringstd::stringstream ss;int a = 123;ss << s;std::string str;ss >> str;string转intstd::string str("123")int n = atoi(str.c_str())原创 2016-08-16 20:19:07 · 570 阅读 · 0 评论 -
关于C++ double浮点数精度丢失的分析
看了一篇关于C/C++浮点数的博文,在Win32下,把int, 指针地址,long等4字节整数赋给一个double后,再用该double数赋给原始类型的数,得到的结果于最初的数值一致,即不存在任何精度丢失。例如下面的结果将总是true: long a=123456; //assign any long number here double db=a; long b=转载 2016-05-10 16:34:37 · 6782 阅读 · 0 评论 -
C++中const用法总结
const在C++中使用十分广泛,不同位置使用的意义也不尽相同,所以想写篇文章对其做一个总结。首先,明确const是“不变”这个基本意义,但是不变不意味着什么都不变,下面将会看到。1. const与变量基本原则:const变量(对象)不能被修改const在变量中的引入和魔数有关,所谓“魔数”指的是突然出现的一个常量值(也叫字面值常量)。for(int i =原创 2016-04-10 14:35:40 · 2635 阅读 · 0 评论 -
C++直接初始化与复制初始化的区别深入解析
这篇文章主要介绍了C++直接初始化与复制初始化的区别深入解析,是很多C++初学者需要深入了解的重要概念,需要的朋友可以参考下C++中直接初始化与复制初始化是很多初学者容易混淆的概念,本文就以实例形式讲述二者之间的区别。供大家参考之用。具体分析如下:一、Primer中的说法首先我们现来看看经典是怎么说的:“当用于类类型对象时,初始化的复制形式和直接形式有所不同:直转载 2016-04-07 21:35:51 · 721 阅读 · 0 评论 -
C++中CloseHandle()函数的使用
转自:http://blog.youkuaiyun.com/lhsxsh/article/details/3905505很多程序在创建线程都这样写的:ThreadHandle = CreateThread(NULL,0,.....);CloseHandel(ThreadHandle );这不是刚好创建又关闭了吗?线程怎么运行呢?解释:Closing a thread转载 2015-09-20 15:23:32 · 5097 阅读 · 0 评论 -
常用排序算法的实现
1. 排序分类In-place sort(不占用额外内存或占用常数的内存):插入排序、选择排序、冒泡排序、堆排序、快速排序。Out-place sort:归并排序、计数排序、基数排序、桶排序。内部排序:数据记录在内存中进行排序。外部排序:排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。stable sort:插入排序、冒泡排序、归并排序、计数排原创 2015-11-07 14:00:30 · 571 阅读 · 0 评论 -
shellcode基础(1)
题目:已知以下是我写得一串x86二进制指令码,可以将其加载并运行。char buff[]={"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30""\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff""\x31\xc0\xac\x3c\x6原创 2015-09-16 20:23:31 · 2820 阅读 · 1 评论 -
windows多线程编程简介(1)
什么是线程,线程的优点是什么线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可以看作是Unix进程的表亲,同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local stor原创 2015-09-23 18:25:52 · 753 阅读 · 0 评论 -
windows多线程编程简介(2)
当你创建一个线程时,其实那个线程是一个循环。这样就带来了一个问题,在那个死循环里要找到合适的条件退出那个死循环,那么是怎么样实现它的呢?在Windows里往往是采用事件的方式,当然还可以采用其它的方式。在这里先介绍采用事件的方式来通知从线程运行函数退出来,它的实现原理是这样,在那个死循环里不断地使用WaitForSingleObject函数来检查事件是否满足,如果满足就退出线程,不满足就继续运行。原创 2015-09-28 16:25:34 · 592 阅读 · 0 评论 -
一个简单的PE感染病毒
/-------通过开辟一个新的节表放置shellcode修改PE入口点到shellcode,并在shellcode中设置返回原PE入口点PE文件格式参考资料:http://bbs.pediy.com/showthread.php?t=21932----------//*** 本程序只适用于载入基址定位的,非随机基址 感染指定目录的PE文件 添原创 2015-09-22 23:05:24 · 4699 阅读 · 0 评论 -
一个指针与地址的例子
例句:PIMAGE_SECTION_HEADER pSecHeader = (PIMAGE_SECTION_HEADER)(*(DWORD*)&pNtHeader + sizeof(IMAGE_NT_HEADERS32));pNtHeader是一个结构体指针,指向一个IMAGE_NT_HEADER结构体;pSecHeader 是一个结构体指针,指向一个IMAGE_SECTI原创 2015-09-10 08:54:40 · 777 阅读 · 0 评论 -
值传递、指针传递、引用传递的区别
转自:http://www.cnblogs.com/yjkai/archive/2011/04/17/2018647.htmlC++中值传递、指针传递、引用传递的总结1. 值传递形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改转载 2015-09-09 18:35:58 · 480 阅读 · 0 评论 -
VC中的stdafx.h简介(原理及作用)
简介:stdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展)。所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。转载 2015-09-20 15:30:21 · 1283 阅读 · 0 评论 -
tchar.h及TCHAR数据类型介绍
转自:http://blog.youkuaiyun.com/mousebaby808/article/details/5259944请支持原创!并不是所有的Windows操作系统都支持UNICODE编码的API(例如早期的Windows98), 这就造成了两种结果:某些版本的Windows应该应用wchar_t来保存字符, 某些平台的Windows应该使用char类型来保存字符, 显然这两转载 2015-09-20 15:40:57 · 4934 阅读 · 0 评论 -
C++动态分配二维数组
1. 动态分配动态分配就是在运行的时候进行内存的分配,在C++中,可以在栈上分配数组,这种情况下,必须指定数组的长度,长度不能是变量,必须是常量或者常量表达式(其原因在于静态分配在编译时需要知道数组的长度,而变量在编译时不知道大小,所以必须指定为常量)动态分配的长度可以是变量,也可以是输入的数值。不同于Java,C++的数组可以分配在栈上(静态分配(int a[5])。Java除了原创 2016-04-04 23:11:18 · 1573 阅读 · 0 评论 -
快速求素数序列方法
唉,说来尴尬,居然写不出来快速求素数的方法,回来查了查,整理了一下思路其实思路也很简单,记住一条定理即可。定理:如果n不是素数,则n有一个素数因子d,并且满足: 1 证明:如果n不是素数, 则由定义,n有一个因子d满足: 1 这样的话就可以直接定义一个素数序列来判断了,而不用逐一或者逐二(跳过偶数)来寻找因子#include "stdi原创 2016-03-22 14:39:19 · 1537 阅读 · 0 评论 -
socket编程原理
1. 问题的引入 UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-close)。在一个用户进程进行I/O操作时,它首先调用“打开”获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文件或设备上进行I/O操作的进程。然后这个用户进程多次调用“读/写”以传输数据。当所有的传输操作完转载 2016-03-10 10:29:42 · 714 阅读 · 0 评论 -
VS编译错误:syntax error : missing ';' before 'type'
1. 前几天在VS中写C语言中,总是出现一个错误(好久没写C语言了.....)int getPosition(MGraph G, char ch){ for(int i = 0; i { if(G.vertexs[i] == ch) return i; } return -1;}红色的那一行总是提示出错!错误提示就是:syntax error :原创 2016-03-06 13:38:49 · 1261 阅读 · 0 评论 -
同步和异步的概念
前言今天在看安卓广播机制的时候,无意中看到一个一本书中提到标准广播是异步执行的广播,而有序广播是同步执行的广播。虽然以前对同步和异步通信有所了解,但是感觉在不同的应用场景下总是容易混淆,所以今天查了查资料,做个小总结。1. 困惑?安卓的标准广播机制是一种完全异步执行的广播,异步的特点在于广播发出之后,所有的广播接收器都能在几乎同一时刻接受这条广播消息,没有先后顺序,不会被截原创 2015-12-20 10:39:29 · 2193 阅读 · 0 评论 -
cache测试及其矩阵优化
利用c/c++测试电脑的cache参数1. 指令yu'qu原创 2015-11-13 14:50:37 · 6301 阅读 · 3 评论 -
转义字符表
有时候忘记了需要查询转义字符描述\(在行尾时)续行符\\反斜杠符号\'单引号\"双引号\a响铃\b退格(Backspace)\e转义\000空\n换行\v纵向制表符\t横向制表符原创 2015-10-13 15:16:46 · 676 阅读 · 0 评论 -
#pragma简介及常见用法
在#Pragma 是预处理指令它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma 指令对每个编译器给出了一个方法,在保持与 C 和 C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #Pragma Para其中Para为参数,下面来看一些常用的参数。原创 2015-09-20 15:52:37 · 829 阅读 · 0 评论