c++基础
文章平均质量分 54
lyz_cs
哈哈哈
展开
-
c语言指针类型转换为intptr_t,保存地址
从intptr_t定义可以看出,intptr_t在不同的平台是不一样的,始终与地址位数相同,因此用来存放地址,即地址。3、指针与intptr_t C语言指针用来保存变量或常量的地址,地址由处理器的位数决定。在windows程序中,经常用到句柄,其实就是一个地址,具备通用性,对底层进行了封装。先对这个理解不深刻,什么时候需要将指针转换为intptr_t类型。...转载 2018-06-27 16:20:40 · 1483 阅读 · 0 评论 -
C++调用Python浅析
简述一般开发过游戏的都知道Lua和C++可以很好的结合在一起,取长补短,把Lua脚本当成类似动态链接库来使用,很好的利用了脚本开发的灵活性。而作为一门流行的通用型脚本语言Python,也是可以做到的。在一个C++应用程序中,我们可以用一组插件来实现一些具有统一接口的功能,一般插件都是使用动态链接库实现,如果插件的变化比较频繁,我们可以使用Python来代替动态链接库形式的插件(堪称文本形式的动转载 2017-01-26 21:46:27 · 758 阅读 · 0 评论 -
WaitForSingleObject()函数、WaitForMultipleObject()函数
在多线程下面,有时候我们会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjects。这两个函数都会等待Object被标为有信号(signaled)时才返回的。那么,什么是信号呢?简单来说,Windows下创建的Object都会被赋予一个状态量。如果Object被激活了,转载 2017-01-09 23:28:05 · 1598 阅读 · 0 评论 -
C++多线程编程简单实例
C++本身并没有提供任何多线程机制,但是在windows下,我们可以调用SDK win32 api来编写多线程的程序,下面就此简单的讲一下: 创建线程的函数HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T dwStackSize,转载 2016-07-06 22:08:51 · 406 阅读 · 0 评论 -
用CMutex类实现程序互斥运行
在软件的开发过程中,有时需要控制一个程序不能同时有多个实例运行,也就是多个进程间互斥运行。我们在Visual C++ 6.0中利用CMutex类实现了多个进程间互斥运行。在Visual C++ 6.0中我们用默认方式生成基于对话框的名为“test”的应用程序,在test.cpp文件开头加上以下一行代码#include原创 2016-09-06 19:36:37 · 1220 阅读 · 0 评论 -
freopen()函数的使用
当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中。但由于调试往往不能一次成功,每次运行时,都要重新输入一遍测试数据,对于有大量输入数据的题目,输入数据需要花费大量时间。 使用freopen函数可以解决测试数据输入问题,避免重复输入,不失为一种简单而有效的解决方法。 函数名:fre转载 2016-12-16 00:36:24 · 332 阅读 · 0 评论 -
sscanf()总结
在看unix网络编程时,突然发现用到sscanf()函数,就顺便从网上搜集资料整理一下。 sscanf() 的作用:从一个字符串中读进与指定格式相符的数据.原型: int sscanf (const char *str,const char * format,........);说明: sscanf()会将参数str的字符串根据参数format字符串来转换并格式原创 2016-11-27 20:51:06 · 5279 阅读 · 0 评论 -
c++11之chrono头文件
今天看了下chrono,莫名的想翻译一下,望大家指点,小白翻译 头文件 时间库 chrono是一个头文件的名字,但是也是一个std下的一个子命名空间的名字:在这个头文件下的所有元素(除了(不包含)common_type 类 特殊化)不是直接定义在std命名空间下的(就像大多数标准库一样)而是定义在std::chrono命名空间里。 在这个头文件下的元素翻译 2016-11-22 00:50:41 · 7774 阅读 · 0 评论 -
C++ map容器 按照value值排序
正常的map默认按照key值排序,而map又没有像vector一样的sort()函数,那么如果将map按照value值排序呢,方法如下方法. 将map中的key和value分别存放在一个pair类型的vector中,然后利用vector的sort函数排序:#include #include #include #include #include using na原创 2016-10-30 00:57:34 · 22379 阅读 · 4 评论 -
设计模式C++实现——观察者模式
Observer观察者模式作用:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。也就是: 观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它还有两个别名,依赖(Dependents),发布-订阅(Publish-Subsr转载 2016-09-26 11:04:42 · 240 阅读 · 0 评论 -
C++0x/11 函数指针、function、bind以及lamda表达式总结
本文是C++0x系列篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制。之所以把这三块放在一起讲,是因为这三块之间有着非常密切的关系,通过对比学习,加深对这部分内容的理解。在开始之间,首先要讲一个概念,closure(闭包),这个概念是理解lambda的基础。下面我们来看看wikipedia上对于计算机领域的closure的定义:A转载 2016-09-25 21:33:29 · 1212 阅读 · 0 评论 -
C++11 lambda 表达式解析
C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看。这里将介绍 C++11 的 lambda 表达式。很多语言都提供了 lambda 表达式,如 Python,Java 8。lambda 表达式可以方便地构造匿名函数,如果你的代码里面存在大量的小函数,而这些函数一般只被调用一次,那么不妨将他们重构成 l原创 2016-09-25 14:47:18 · 274 阅读 · 0 评论 -
线程句柄以及createthread()和closehadle()
1,线程和线程句柄(Handle)不同,线程是一个程序的工作流程,线程句柄是一个内核对象。线程的生命周期就是线程函数从开始执行到线程结束,线程句柄一旦CreateThread返回,如果你不用它操作线程或者等待线程等操作比如waitforsingleobject,就可以CloseHandle。(ps:对于线程来讲,如果线程在运行状态则为无信号状态,在退出后为有信号状态。所以我们可以使用 Wa转载 2016-11-14 19:27:30 · 1350 阅读 · 0 评论 -
CreateMutex互斥量
C++API CreateMutex找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。CreateMutex()函数可用来创建一个有名或无名的互斥量对象。HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针 BOOL bInitialOwner, //转载 2017-01-10 00:30:54 · 3480 阅读 · 0 评论 -
vector的erase问题
问题引入vector调用erase(),由于vector是采用的random_access_iterator,迭代器可以直接加减来指向元素。for (int i = 0; i < m; i++) { int t; cin >> t; trail[i] = p[t-1]; //t索引的顺序是递增的 other.erase(other.begin() - 1 - i);原创 2017-01-12 19:05:50 · 356 阅读 · 0 评论 -
#pragma once与 #ifndef的区别
转载自“百度百科”#pragma once 这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次 #pragma once用来防止某个头文件被多次include,#ifndef,#define,#endif用来防止某个宏被多次定义。 #pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已...转载 2018-04-12 11:27:11 · 165 阅读 · 0 评论 -
c++ primer有感
一、const引用形参应该将不需要修改的实参的形参设置为const引用类型,这样的话,比较灵活,可以传递const和非const类型,且避免含有普通的非引用形参的函数复制元素。 二、指向指针的引用形参 (int* &a)可以改变指针的值。三、容器作参数C++ 程序员倾向于通过传递指向容器中需要处理的元素的迭代器来传递容器:void print(vector::con原创 2018-01-05 00:45:04 · 267 阅读 · 0 评论 -
头文件经常需要其他头文件--避免多重包含
在编写头文件之前,我们需要引入一些额外的预处理器设施。预处理器允许我们自定义变量。预处理器变量 的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。为了避免名字冲突,预处理器变量经常用全大写字母表示。预处理器变量有两种状态:已定义或未定义。定义预处理器变量和检测其状态所用的预处理器指示不同。#define 指示接受一个名字并定义该名字为预原创 2017-12-29 11:21:56 · 487 阅读 · 0 评论 -
声明和定义--extern
声明与定义变量的 定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。声明用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过使用 extern 关键字声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字 extern:extern int i; // declares b原创 2017-12-29 00:13:18 · 1697 阅读 · 0 评论 -
缺少Python27_d.lib的解决方法
在c++中调python函数时,出现了这个问题,python每个版本额解决方法类似。在vs下引用伪造的”debug版本“可能出现链接问题 引用自己伪造的debug版Python27_d.lib、Python27_d.dll可能出现的问题:extmodule.obj : error LNK2019: unresolved external symbol __imp___Py_D转载 2017-01-26 20:47:04 · 1613 阅读 · 1 评论 -
在C/C++中嵌入python, 用PyImport_ImportModule返回值总是为0的解决方法
import某块返回值为0的是因为:VC工程的当前工作目录和.py文件所在目录不一致导致的。当.py文件和工程不在统一目录时,若要import .py文件,只需要在import之前增加python的搜索目录就可以了: PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('py所在目录原创 2017-01-26 21:21:50 · 10540 阅读 · 23 评论 -
线程间通信常用的三种方法
线程间要进行通讯--或者说一个线程要获得另一个线程的某些数据. 多线程通信的方法主要有以下三种: 1.全局变量进程中的线程间内存共享,这是比较常用的通信方式和交互方式。注:定义全局变量时最好使用volatile来定义,以防编译器对此变量进行优化。2.Message消息机制常用的Message通信的接口主要有两个:PostMessage和P原创 2017-02-11 12:53:59 · 7746 阅读 · 0 评论 -
MultiByteToWideChar和WideCharToMultiByte的正确使用方法及参数详解,实现字符编码转换、宽字符和字符的转换
本文内容摘自《Windows核心编程》(第五版)Page26。 文中已经详细阐述了这两个函数的用法,我这里仅仅作为备忘录。函数的参数请参考百度百科MultiByteToWideChar和WideCharToMultiByte。函数原型:int MultiByteToWideChar( UINT CodePage, DWORD dwFlags,转载 2017-02-09 22:33:59 · 1927 阅读 · 0 评论 -
lstrlenW() 解析
int MNLS_lstrlen( LPCWSTR lpsz);确定指定unicode编码字符串(宽字符串)的长度,也就是包含字符的数量,不包括'\0'字符。原创 2017-02-09 21:18:55 · 2494 阅读 · 0 评论 -
ZeroMemory memset 等清零的用法
ZeroMemory memset 等清零的用法(笔记)(1)函数的原型和参数的介绍 ZeroMemory函数 void ZeroMemory( PVOID Destination,SIZE_T Length );参数 Destination :指向一块准备用0来填充的内存区域的开始地址。 Length :准备用0来填充的内存区域的大小转载 2017-02-09 21:02:47 · 1080 阅读 · 0 评论 -
Py_BuildValue()返回NULL的原因及解决方法;string在char和utf-8编码之间互转
Py_BuildValue()返回NULL问题提出PyObject* Py_BuildValue(char* format, ...)构建一个参数列表,把C类型转换为Python对象,使得Python里面可以使用C类型数据。如果传递一个中文字符串,会返回NULL,而英文正常。问题原因如果要传字符串过去,python是utf-8编码的,而s原创 2017-02-09 18:29:49 · 2301 阅读 · 1 评论 -
【C++11】nullptr关键字
从1972年C语言刚刚诞生以来,常数0就扮演着整数(int)0和空指针( null pointer )两种角色。为了避免理解上的二义性,C语言通常使用NULL宏来表示空指针,NULL宏通常被定义为(void *)0或0, 而C++仅仅采用0来表示空指针,这样存在一个问题:比如对于重载函数 fun(char *) 和 fun(int) 的调用来说,若直接用NULL作为参数调用fun(NULL),我们转载 2016-09-22 11:37:49 · 1008 阅读 · 0 评论 -
C++11中万能的可调用类型声明std::function<...>
在C++11中,callable object 包括传统C函数,C++成员函数,函数对象(实现了()运算符的类的实例),lambda表达式(特殊函数对象)共4种。程序设计,特别是程序库设计时,经常需要涉及到回调,如果针对每种不同的callable object单独进行声明类型,代码将会非常散乱,也不灵活。如下示例:#include #include using namespace std;转载 2016-09-25 15:10:53 · 465 阅读 · 0 评论 -
C++之shared_ptr总结
Share_ptr也是一种智能指针。类比于auto_ptr学习。所以推荐先学习auto_ptr,再来学习shared_ptr。本博客的前两个就是auto_ptr的总结。希望感兴趣的朋友可以看看。 Shared_ptr和auto_ptr最大的区别就是,shared_ptr解决了指针间共享对象所有权的问题,也就是auto_ptr中的赋值的奇怪问题。所以满足了容器的要求,可以用于容器中。转载 2016-09-25 13:31:43 · 451 阅读 · 0 评论 -
C++中的 using
using在c++中有两个用法:一、使用名字空间。二、使用名字空间的名字。一使用名字空间大家都知道,一般常见的[cpp] view plain copy print?using namespace std; 完了。二、使用名字空间的名字。像[cpp] view原创 2016-07-31 20:39:31 · 429 阅读 · 0 评论 -
c++继承父类的子类,如何调用父类的同名函数?
子类调用父类的同名函数:子类和父类返回值参数相同,函数名相同,有virtual关键字,则由对象的类型决定调用哪个函数。子类和父类只要函数名相同,没有virtual关键字,则子类的对象没有办法调用到父类的同名函数,父类的同名函数被隐藏了,也可以强制调用父类的同名函数class::funtion_name。子类和父类参数不同,函数名相同,有virtual关键字,原创 2016-07-31 19:24:13 · 26174 阅读 · 0 评论 -
C++中模板的特化与偏特化
1.引言C++中的模板分为类模板和函数模板,虽然它引进到C++标准中的时间不是很长,但是却得到了广泛的应用,这一点在STL中有着充分的体现。目前,STL在C++社区中得到了广泛的关注、应用和研究。理解和掌握模板是学习、应用和研究以及扩充STL的基础。而STL模板实例中又充斥着大量的模板特化和偏特化。2.模板的定义(1) 类模板定义一个栈的类模板,它可以用来容纳不同的数据类型转载 2016-07-12 17:00:05 · 268 阅读 · 0 评论 -
如何正確的使用迴圈(使用for_each)
Abstract之前在(原創) 如何使用for_each() algorithm? (C/C++) (STL) 曾經討論過for_each(),不過當時功力尚淺,只談到了皮毛而已,這次看了effective STL的item 41、43後,對for_each()又有了更深入的了解,因此做了本篇心得報告。Motivation看到了eXile的C++中实现 foreach使用了巨集转载 2016-07-10 13:28:54 · 522 阅读 · 0 评论 -
C++中typename关键字的使用方法和注意事项
C++中typename关键字的使用方法和注意事项 1, 什么地方使用?用在模板定义里,标明其后的模板参数是类型参数。 例如 templateT foo(const T& t, const Y& y){//....};templaceclass CTest{private: T t;public:转载 2016-06-11 18:52:14 · 2697 阅读 · 0 评论 -
C++中map容器的说明和使用技巧
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。 map为命名空间std中一个类型。一、map的说明 1 头文件 #include 2 定义 map my_Map; 或者是typedef map MY_MAP; MY_MAP my_原创 2016-06-01 16:02:30 · 378 阅读 · 0 评论 -
outputdebugstring 调试程序 同时也可以输出调试日志文件
outputdebugstring是window下的api函数,支持unicode和ascii编码,可以在debug和release下显示信息outputdebugstring使用包含头文件windowl.h即可。outputdebugstring参数是以\0结束的字符串,若要使用多参数如printf格式的可以使用下面的函数:void OutputTrace(const c转载 2016-05-31 21:12:35 · 1855 阅读 · 0 评论 -
VC中TRACE()的用法
个人总结:最近看网络编程是碰到了TRACE语句,不知道在哪里输出,查了一晚上资料也没找出来,今天终于在CSDN上找到了,真是个高地方啊,方法如下:1.在MFC中加入TRACE语句2.在TOOLS->MFC TRACER中选择 “ENABLE TRACING”点击OK3.进行调试运行,GO(F5)(特别注意:不是执行‘!’以前之所以不能看到TRACE内容,是因为不是调试执行,转载 2016-05-28 00:59:17 · 679 阅读 · 0 评论 -
使用API函数mouse_event可以模拟鼠标事件
使用API函数mouse_event可以模拟鼠标事件使用API函数mouse_event可以模拟鼠标;先在程序中加入如下的声明后,就能引用mouse_;PrivateDeclareSubmouse_e;其中各个参数的意义如下表所示:;参数意义;dwFlagsLong,下表中标志之一或它们的组;dx,dyLong,根据MOUSEEVENTF_;cButtonsLong转载 2015-10-25 19:06:25 · 39831 阅读 · 1 评论 -
算法之排列与组合算法
递归法: #includeint combination(int n,int k){ if (n return 0; else if(n==k||k==0) return 1; else return combination(n-1,k)+combination(n-1,k-1);原创 2015-09-14 14:15:41 · 502 阅读 · 0 评论 -
C++中的IO类(iostream, fstream, stringstream)小结
以前学习C++的时候, 总是囫囵吞枣地理解cin, cout等东东, 最近又在刷oj, 使用到了IO类的时候, 有点感触, 所以呢, 打算记录一下。 俗话说, 一图胜过千言万语, 这不是没有道理的, 下面, 我们来看看基本IO类的继承结构: 在我们写C++简单代码的时候, 最喜欢写#include , 那么, 这实际上是在包括IO流原创 2016-08-27 11:55:15 · 2858 阅读 · 1 评论