C++FAQ
双杯献酒
这个作者很懒,什么都没留下…
展开
-
双向指针
// 双向指针#include <iostream>#include <memory>#include <utility>#include <vector>template <typename T1, typename T2>struct Linked { friend struct Linked<T2, T1>; Linked(T2* t) { other = nullptr; data .原创 2020-05-15 19:51:05 · 677 阅读 · 0 评论 -
VC常用快捷键
MSDN: ms-help://MS.MSDNQTR.v90.chs/dv_vssettings/html/ed344459-461a-4770-9c13-19ef04813e67.htm https://msdn.microsoft.com/en-us/library/dn600331.aspxhttps://msdn.microsoft.com/en-us/library/da5kh0wa.a...原创 2011-09-21 15:14:42 · 674 阅读 · 0 评论 -
C++模版函数: 按成员变量比较大小
// C++模版函数: 按成员变量比较大小// VC8.0#include "stdafx.h"templatebool CompareMember(const T& t1, const T& t2){ return t1.*m }struct A{ int x; int y;};int _tmain(int argc, _TCHAR* argv原创 2012-03-16 17:09:01 · 834 阅读 · 0 评论 -
C++11的lambda
1. lambda函数的形式是:[captures] (params) -> ret {Statments;} 其中:captures 是局部变量截取方式params 是函数参数ret是函数返回值, 如果可以推断出,则可省略不写Statments是函数体语句2. 变量截取的选项:[] 不截取任何变量[this] 使用当前类中的this指针[原创 2014-05-12 10:23:16 · 764 阅读 · 0 评论 -
一种简单的密码验证方案2
1.过程(1). 客户端将name(或者经过加密), 一个服务器约定的公共salt, 密码password(或者经过hash), 当前时间t 计算 data = hash(salt+name+password+t) 发送 nane, t, data到服务器(2). 服务器从数据库提取密码 如果t与当前时间相差超过阀值, 则认为数据已经过期, 要求客户端重新发送. 计算...原创 2014-05-06 10:50:14 · 986 阅读 · 0 评论 -
用大括号初始化C++数据成员
// 当结构体的成员中有构造函数(比如string), 则数组不可用{}初始化为0// VC2008通过#include "stdafx.h"#include struct A{int i;std::string s;};int _tmain(int argc, _TCHAR* argv[]){A a1 = {}; //原创 2013-09-10 16:52:03 · 3922 阅读 · 0 评论 -
Eclipse中文显示乱码
VS2008的默认文件编码是GB2312, 在Eclipse打开会显示乱码.因为Eclipse默认是UTF-8.设置:1.Window -> Preferences -> General -> Content Types ->Text Default Encoding 输入GB23122.对应工程 PropertiesText file encoding ->原创 2013-06-07 10:37:53 · 1046 阅读 · 0 评论 -
罗马字符串转数字
// 罗马字符串转数字// VC2008通过#include "stdafx.h"#include// 罗马字符串转数字int GetNumber(const char* strNum){ int nValue = 0; while(*strNum != '\0') { int nN = 0; char c = *(strNum+1); switch(*strNu原创 2013-04-18 14:37:46 · 853 阅读 · 0 评论 -
数字转罗马字符串
// 数字转罗马字符串// VC2008通过#include "stdafx.h"#include // 数字转罗马字符串// 需要保证strData空间足够// 范围: 1~3999void NumberToString(int nValue, char* strData){ const char* s1000[4] = {"", "M", "MM", "MMM"}; c原创 2013-04-18 15:00:44 · 941 阅读 · 0 评论 -
定时器
制作一个定时器管理器,需要下面的操作最快(1)插入(2)查找最小元素(3)删除最小元素最小堆正好符合这个要求,STL中有两种选择:(1)使用priority_queue(2)使用heap函数 make_heap push_heap pop_heap显然是使用priority_queue更为简单.但是priority_queue没有提供原创 2013-03-21 15:34:36 · 836 阅读 · 0 评论 -
分段的随机命中
// 分段的随机命中// VC2008#include "stdafx.h"#include #include #include // nTotal: 权重总和// nNum: 分段数// pData: 命中权重// 返回: 命中的下标, 出错为-1int RandomHit(int nTotal, int nNum, int *pData){原创 2013-03-02 10:17:45 · 692 阅读 · 0 评论 -
简单协程
/*协程最复杂的地方是:如果在协程切换的时候,某些函数只执行到中途,则需要保留栈数据.这样将涉及到栈切换的操作.考虑一种简单情况,即只在协程函数执行切换,则可以用return来做,这样:所有协程函数保证在切换的时候,其栈为空(因为是正常return),则可以很容易实现.这样本质上就等效于一个循环中的switch.当协程函数切换的时候,实际就是return,原创 2013-02-26 17:27:47 · 525 阅读 · 0 评论 -
C++词汇
#define#error#import#undef#elif#if#include#using#else#ifdef#line#endif#ifndef#pragma__DATE____FILE____LINE____TIME____TIMESTAMP____FUNCTION___WIN32_WIN64原创 2012-12-04 16:55:01 · 596 阅读 · 0 评论 -
获取TCP链接的四元组
// 获取TCP链接四元组bool GetSocketIpPort(SOCKET s, string& local_ip, WORD& local_port, string& peer_ip, WORD& peer_port){local_ip = "0.0.0.0";local_port = 0;peer_ip = "0.0.0.0";peer_port = 0;struct sockaddr_原创 2014-11-12 11:34:48 · 2534 阅读 · 0 评论 -
在C中创建二维Lua表示例
用C代码为Lua创建一个全局表.原创 2015-03-27 11:41:13 · 1701 阅读 · 0 评论 -
枚举遍历组合
#include <iostream>#include <vector>#include <algorithm>// 组合枚举// 初始化std::vector<int> init_combination(int M){ std::vector<int> data; for (auto i = 0; i < M;...原创 2019-07-28 20:08:10 · 331 阅读 · 1 评论 -
选第K大的数
#include <algorithm>// 快速排序方式的选第K小的数// (如果是选“大”的数, 可以把比较用greater, 或者选第n-k个)template<typename T, class _Pr>int get_pos(T* data, int n, int k, _Pr _Pred){ int h = 0; int t = n - 1...原创 2019-08-08 02:22:02 · 213 阅读 · 0 评论 -
模板元编程-判断质数
#include <iostream>#include <type_traits>template<uint8_t N>struct is_prime{ template<uint8_t N1, bool finish> struct is_prime_check { enum {check_end = (N1*N1 > ...原创 2019-06-26 14:31:44 · 463 阅读 · 0 评论 -
C++模板判断类是否存在某个成员变量
#include <iostream>#include <type_traits>// 检查 xxxx 是否是类T的成员template <typename T>struct has_member_xxxx{ // 如果 &T::xxxx 合法, 本函数就合法 // 下面check<T>(0)优先调用本函数, 返回值是voi...原创 2019-06-21 17:22:37 · 3236 阅读 · 0 评论 -
摩尔斯电码字典序号
// 摩尔斯电码字典序号// 原题参见// https://bbs.csdn.net/topics/392691483#include <iostream>#include<string>// 求组合数C(N, n)int c(int N, int n){ double p = 1.0; for (int i = 0; i <n; ++i) ...原创 2019-06-09 21:34:37 · 1150 阅读 · 2 评论 -
把不同类型的对象放入数组
#include <iostream>#include <vector>// 接口定义class I{public: virtual void dosome() = 0;};// 实现1class A {public: void dosome() { std::cout << "A dosome()" << std...原创 2019-05-16 20:00:07 · 1794 阅读 · 0 评论 -
函数调用链
// 将不同参数和返回值的函数组织到数组里并依次调用// (目前尚不支持void函数)#include <vector>#include <memory>#include <iostream>#include <functional>#include<string>#include <sstream>usin...原创 2019-05-19 12:53:45 · 665 阅读 · 0 评论 -
C++的promise和future
#include <iostream>#include <thread>#include <future>// https://en.cppreference.com/w/cpp/thread/promise// https://zh.cppreference.com/w/cpp/thread/promisevoid add(std::promis...原创 2019-05-08 16:24:33 · 747 阅读 · 0 评论 -
boost的协程coroutine
1. Boost v1.59 之前是coroutine, 之后是coroutine22. 头文件路径 $(BOOST_DIR)\ #include <boost/coroutine2/all.hpp>3. 库文件路径 $(BOOST_DIR)\libs; $(BOOST_DIR)\stage\lib3. 如果提示缺少 libboost_context-...原创 2019-04-27 17:31:15 · 629 阅读 · 0 评论 -
Lua调用C-API的时候返回给Lua另一个C函数
extern "C"{#include <lua.h> #include <lauxlib.h> #include <lualib.h> }// C返回给Lua用的函数static int getHello(lua_State *L){ lua_pushstring(L, "hello"); return 1;}// 注册给Lu...原创 2018-11-08 12:11:13 · 264 阅读 · 0 评论 -
TCP的4元组
#include "stdafx.h"#include <WinSock2.h>#pragma comment(lib, "WS2_32.lib")#include <windows.h>#include <string>#include <iostream>#include <thread>#define原创 2018-10-09 14:55:34 · 814 阅读 · 0 评论 -
VC2008转义字符
C++里通用的转义字符大致有以下三种形式:(1)八进制 \ddd (d: 0~7)(2)十六进制 \xhh \xhhhh \xhhhhhhhh(3)UNICODE \uUUUU但是在VC2008中,(2)这种形式会一直解析到遇到第一个非十六进制字符.个人认为这是一个BUG.暂时有两种解决方法:(1)用八进制或者UNICODE(原创 2012-08-17 15:20:23 · 945 阅读 · 0 评论 -
洗牌函数
// 洗牌函数void shuffle(int* card, int nLen){ for(int i=nLen-1; i>0; --i) { int r = rand()%(i+1); if(r != i) std:swap(card[r], card[i]); }// 标准库 std::random_shuffle原创 2012-08-04 08:38:06 · 1169 阅读 · 0 评论 -
捕获参数错误异常
// 捕获参数错误异常// VC 2008// 编译选项: // 启用C++异常: /EHa#include "stdafx.h"#include "assert.h"#include #include #include #pragma comment(lib, "Dbghelp.lib")void new_invalid_parameter_handler( const w原创 2009-05-21 11:55:00 · 1187 阅读 · 0 评论 -
字符串函数
1.C函数 / WindowsAPI函数 (C函数则可以跨平台, WinAPI一般函数多个字母w, 可以运行于内核模式) _stprintf wsprintf2.ASCII(MBCS) / Unicode (C函数的Unicode版本通常多一个w, Windows的版本区分是通过后缀的A或者W) _stprintf / sprintf / swprintf wsprintf /原创 2009-05-21 11:25:00 · 833 阅读 · 0 评论 -
字符数组拷贝
// 字符数组拷贝// VC 2008#include "stdafx.h"#include // 字符串拷贝, 末尾用0填充char* strcpy_len(char pDest[], WORD iDestLen, const char pSrc[], WORD iSrcLen){ if(pDest == 0 || iDestLen == 0) { return pDest; } if原创 2009-04-28 17:02:00 · 831 阅读 · 0 评论 -
Python和C/C++之间数据转换的代码
Python和C/C++之间数据转换的代码:格式 Python C/C++s str char*z str/None char*/NULLi int intl long longc str原创 2009-04-28 12:35:00 · 3680 阅读 · 0 评论 -
内存读异常示例程序
// 内存读异常示例程序// VC 2008// 编译选项: /EHa#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){ char* pCH0 = new char; *pCH0 = 0; char* pCH = pCH0; long int iCount = 0; long int iLoopCount = 0; try {原创 2009-04-28 12:33:00 · 763 阅读 · 0 评论 -
VS2008查找和替换的正则表达式
Regular Expressions (Visual Studio)http://msdn.microsoft.com/en-us/library/2k3te2cs.aspx常用:. 任何单个字符(Any character)* 任何零个或者多个字符(Zero or more)+ 任何一个或者多个字符(One or more)^ 行的开始(eginning of line)$ 行的原创 2009-04-22 12:58:00 · 1598 阅读 · 0 评论 -
VS2008编辑并继续
VS2008编辑并继续设置:(1)属性 --> 配置属性 --> C/C++ --> 常规 调试信息格式: 用于“编辑并继续”的程序数据库(/ZI)(2)属性 --> 配置属性 -->链接器 --> 常规 启用增量链接: 是(/INCREMENTAL)(3)属性 --> 配置属性 -->链接器 --> 高级 探察: 否(4)选项 --> 调试 --> 编辑并继续 启原创 2009-04-21 14:35:00 · 1792 阅读 · 0 评论 -
SQL Error 22002 没有提供需要的指示器变量
[Microsoft][ODBC SQL Server Driver]没有提供需要的指示器变量 SQLState 22002: Indicator variable required but not supplied http://support.microsoft.com/kb/158618/en-us/ 对于数据库中的TEXT数据, 如果在读的时候绑定的指示器变量(用原创 2009-03-20 20:55:00 · 2989 阅读 · 0 评论 -
获取程序版本号
// 取进程版本号码// VC 2008// (控制台程序的版本资源需要手动插入)#include "stdafx.h"#include #pragma comment(lib, "Version.lib")DWORD GetVer(WORD& wVer1, WORD& wVer2, WORD& wVer3, WORD& wVer4);int _tmain(int argc, _TC原创 2008-11-20 13:26:00 · 2030 阅读 · 0 评论 -
C++的转意字符
C++的字符串转意字符主要有:(1)专用 /a /b /f /n /r /t /v / /" // /?(2)数字 /ooo /xhh /xhhhh(3)Trigraphs(3连字符) ??= ??( ??/ ??) ?? ?? ??! ??> ??-原创 2007-02-24 17:13:00 · 1553 阅读 · 0 评论 -
XML注释
这是一个XML注释的例子:/// /// 将字符串中的小写字母变成大写. /// /// 准备转换的字符串 /// 实际执行转换的字符个数 /// 例如: "abCd2" ==> "ABCD2" 返回3 int DemoFun(char* pData){ if(pData == 0) { return 0; } int nRet = 0; while(*pData!=0) { if((a原创 2006-08-20 10:40:00 · 1081 阅读 · 0 评论 -
VC批注 使用示例
// VC2008// VC批注 使用示例// 编译选项: 生成时启用C/C++代码分析: 是(/analyze)#include "stdafx.h"#include using namespace vc_attributes;// 要求检查数据有效性质int Fun( [Pre (ValidElementsConst=2)] int *pData ){ return pData[0]原创 2009-06-07 13:26:00 · 1011 阅读 · 0 评论