![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 50
SelfLink
这个作者很懒,什么都没留下…
展开
-
元编程
<br />元编程(Metaprogramming)是指某类计算机程序的编写,这类计算机程序编写或者操纵其他程序(或者自身)作为它们的数据,或者在编译时完成部分本应在运行时完成的工作。很多情况下比手工编写全部代码相比工作效率更高。编写元程序的语言称之为元语言,被操作的语言称之为目标语言。一门语言同时也是自身的元语言的能力称之为反射。 反射是促进元编程的一种很有价值的语言特性。把编程语言自身作为头等对象(如Lisp或Rebol)也很有用。支持泛型编程的语言也使用元编程能力。 元编程通常有两种方式起作用。一转载 2011-05-31 18:38:00 · 379 阅读 · 0 评论 -
TLS 线程局部存储
TLS(Thread Local Storage) 线程局部存储 所有的线程都共享着进程的虚拟地址~ 局部变量为每个线程所独立共享的,静态变量和全局变量是进程中所有线程一起共享的~ TLS可以为线程提供一个唯一的数据用一个全局的索引~每个线程 有自己的副本~各个线程互不影响~其实所保存的数据就是线程关联的~先看个图:如图可见每个线程有自己独立的TLS表格,相当于一个数组原创 2014-05-21 00:09:42 · 740 阅读 · 0 评论 -
数组数对之差的最大值
int MaxSub(int *a,int len){ int maxS = a[0]; int sub = maxS-a[1]; int i = 1; for(; i < len; i++) { if(sub < (maxS-a[i])) sub = maxS-a[i]; if(maxS < a[i]) maxS = a[i]; } r原创 2014-06-25 22:38:08 · 576 阅读 · 0 评论 -
记 boost::function 使用
#include #include #include "boost/function.hpp"typedef boost::function FuncType;class SumFun{ public: void operator()(int i) { std::cout<<"Class sumFun..."<<i+200<<std::endl; }};class原创 2014-03-30 21:17:13 · 458 阅读 · 0 评论 -
前序遍历的非递归实现~(两种方法)
void PreOrder(Node *node){ stack s; s.push(node); Node *p = node; while (!s.empty()) { while (p) { visit(p->value); s.push(p); p = p->left; } if (s.empty()) { p = s.pop();原创 2014-06-16 16:26:58 · 700 阅读 · 0 评论 -
局部静态变量的多线程问题
局部静态变量的多线程问题原创 2014-06-26 20:46:23 · 4703 阅读 · 1 评论 -
插入排序
void InsertSort(int *a, int len) { int i=0; for(i = 1; i < len ; i++) { int j = 0; int key = a[i]; for(j = i - 1 ; j >= 0 ; j--) { if(a[j] < key) break; a[j+1] = a[j]; }原创 2014-05-25 14:36:53 · 351 阅读 · 0 评论 -
选择排序
void SelectSort(int *a, int len){ int i = 0; for( i = 0; i < len - 1; i++) { int j = 0; int min = i; for(j = i + 1; j < len; j++ ) { if( a[min] > a[j] ) min = j; } int tem =原创 2014-05-25 14:35:09 · 340 阅读 · 0 评论 -
冒泡排序
void BubbleSort(int *a, int len){ int i = 0; for(i = 0; i < len - 1; i++) { int j = 0; for( j = 0; j < len - i - 1; j++) { if(a[j] > a[j+1]) { int tem = a[j]; a[j] = a[j+1];原创 2014-05-25 14:35:47 · 344 阅读 · 0 评论 -
KMP 算法
最近在看KMP算法~ 一头雾中原创 2014-05-21 14:30:13 · 465 阅读 · 0 评论 -
求数组里出现一次的数字~其他数字出现三次~
int singleNumber(int A[], int n) { int num = 0; int ret = 0; for(int i = 0; i < 32; i++) { num = 0; for(int j = 0; j < n; j++) {原创 2014-07-02 22:03:01 · 512 阅读 · 0 评论 -
中序遍历的非递归实现
void InOrder(Node *node){ stack s; s.push(node); Node *p = node; while (!s.empty()) { while (p) { s.push(p); p = p->left; } if (s.empty()) { p = s.pop(); visit(p->value);原创 2014-06-16 16:28:24 · 502 阅读 · 0 评论 -
快速排序
void Swap(int *l, int *r){ int tem = *l; *l = *r; *r = tem;}int Partition(int *a, int s, int e) { int key = a[e]; int i = s ; int j; for(j = s ; j < e; j++) { if( key < a[j]) Swap(原创 2014-05-10 22:31:32 · 429 阅读 · 0 评论 -
进程 线程
进程:是一个正在运行的程序的一个实例,原创 2014-06-01 11:50:18 · 369 阅读 · 0 评论 -
后序遍历的非递归实现
void PostOrder(Node *node){ node *cur = NULL; node *pre = NULL; stack s; s.push(node); while (!s.empty()) { cur = s.top(); if ((cur->left == NULL && cur->right == NULL) || (!pre && (p原创 2014-06-16 16:50:45 · 456 阅读 · 0 评论 -
连续子数组的最大和
int MaxSum(int *a, int len){ int sum = 0; int tem = a[0]; for(int i = 1; i < len; i++) { if (tem < 0) tem = a[i]; else tem += a[i]; if (tem>sum) sum = tem; } return sum;}原创 2014-06-09 14:27:04 · 337 阅读 · 0 评论 -
求数组里出现一次的数字~其他数字出现两次~
int OnlyOnce(const int *a, int len){ int x = a[0]; for (int i = 1; i < len; i++ ) { x ^= a[i]; } return x;}原创 2014-06-16 14:54:01 · 367 阅读 · 0 评论 -
二分查找
int BinarySearch(const int *a,const int len, int key){ int mid = 0; int left = 0; int right = len-1; while(left<=right) { mid = left + (right - left) / 2; if(a[mid] < key)原创 2014-06-21 18:52:30 · 372 阅读 · 0 评论 -
全排列
void Range(int *a, int len,int s){ int i = 0; if(s == len-1) { Print(a,len); return; } for(i = s; i < len; i++) { Swap(&a[s],&a[i]); Range(a,len,s+1); Swap(&a[i],&a[s]); }}原创 2014-05-15 23:15:59 · 388 阅读 · 0 评论 -
多线程通信
多线程之间的通信方式 1.全局变量 2.最常用原创 2014-05-20 10:12:46 · 408 阅读 · 0 评论 -
VC6.0中 WTL 配置
首先 到http://www.microsoft.com/download/en/details.aspx?id=11906下载WTL7.01. 手动安装1.执行WTL70.exe , 解压到 文件夹WTL70中 2.把WTL70/AppWiz60中的AtlApp60.awx到VC6.0安装目录*/Microsoft Visual Studio/Common/MSDev98/T原创 2011-06-26 23:20:00 · 641 阅读 · 0 评论 -
EnumProcesses枚举进程
每一个应用程序实例在运行起来后都会在当前系统下产生一个进程,大多数应用程序均拥有可视界面,用户可以通过标题栏上的关闭按钮关闭程序。但是也有为数不少的在后台运行的程序是没有可视界面的,对于这类应用程序用户只能通过CTRL+ALT+DEL热键呼出"关闭程序"对话框显示出当前系统进程列转载 2011-07-08 13:22:48 · 3827 阅读 · 1 评论 -
EnumProcessModules 使用 获取进程的路径
EnumProcessModules Function获得指定进程中所有模块的句柄。语法BOOL WINAPI EnumProcessModules(in HANDLE hProcess,out HMODULE *lphModule,in DWORD cb,out L转载 2011-07-08 19:18:55 · 8160 阅读 · 0 评论 -
vc Ansic-Unicode处理
1.ANSIC与Unicode字符 两者区别就不多少了,一个单字节一个双字节,Unicode可以表示更多的字符,适合诸如汉字的文字系统. 定义使用宽字符: 2.声明Unicode字符与及字符串方法: _T()宏需要包含tchar.h1 wchar_t c=L'A';原创 2011-07-10 13:35:08 · 449 阅读 · 0 评论 -
VC调用CMD命令
有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。CreateProcess因为使用复杂,比较少用。WinExec主要运行EXE文件。如:WinExec(’Notepad.exe Readme.txt’, SW_SHOW);转载 2011-07-10 18:44:34 · 2047 阅读 · 0 评论 -
利用匿名管道实现远程CMD
// vctelnetserver.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include #pragma comment(转载 2011-07-12 21:32:37 · 2821 阅读 · 0 评论 -
WM_CLOSE WM_QUIT WM_DESTROY
有三个消息看 起来差不多,都是处理关闭的事情的。它们是WM_DESTROY,WM_CLOSE,和WM_QUIT。它们的确很相似,但你需要知道它们之间的不同!一 个窗口或者应用程序应该被关闭时发出WM_CLOSE消息,当接收到WM_CLOSE消息时,如果你愿意,向用户提出是否真的退转载 2011-07-20 15:39:23 · 464 阅读 · 0 评论 -
纯虚析构函数
某些类里声明纯虚析构函数很方便。纯虚函数将产生抽象类——不能实例化的类(即不能创建此类型的对象)。有些时候,你想使一个类成为抽象类,但刚好又没有任何纯虚函数。怎么办?因为抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的转载 2011-09-18 23:30:32 · 2053 阅读 · 0 评论 -
低权限向高权限发送消息 (例子 拖拽文件)
因为有UIPI的存在,当低权限向高权限发送先消息的时候,高权限的进程获取不到消息; 先看下什么是UIPI:以下摘自百度百科: UIPI指 User Interface Privilege Isolation(用户界面特权隔离),是Windows NT 6.0后(即Vista)引入的一种新的安全特性,是整个UAC机制的有机组成部分,主要用于拦截接受对自身进程MIC等级还低原创 2013-08-02 22:27:59 · 2263 阅读 · 0 评论 -
def 文件 PRIVATE 作用
对于def 文件PRIVATE 微软大叔已经解释的很清楚了~但是有些人还是不理解~ 网上又没人写的清楚 微软 大叔是这样写的: 可选的 PRIVATE 关键字禁止将 entryname 放到由 LINK 生成的导入库中。它对同样是由 LINK 生成的图像中的导出无效。(原文地址:http://msdn.microsoft.com/zh-cn/library/hyx1zcd3(v原创 2013-08-19 23:46:07 · 1127 阅读 · 0 评论 -
原始 socket 实现 ping ~(SOCK_RAW)
ping的原理就是给指定IP发送ICMP的数据包~实现ping源码:CPing.h/*Time :2013-9-10 22:40Title: CPing.h (实现ping)Author: Ryan Zhang*/#pragma once#include #include #define DATA_SIZE 32#define RECV_SIZE原创 2013-09-10 22:47:50 · 5216 阅读 · 0 评论 -
关于 _endthread _endthreadex 使用的问题
第一点:MSDN :_endthread automatically closes the thread handle;when you use _beginthreadex and _endthreadex, you must close the thread handle by calling the Win32 CloseHandle API. 这段话说_原创 2013-12-04 23:38:11 · 1832 阅读 · 0 评论 -
公共子串
#include #include using namespace std;void SearchMax(const char *strA, int lenA,const char *strB, int lenB){ int i = 1; int j = 1; int sign[50][50] = {{0,0}}; for(; i < lenA; i++) { for(j原创 2014-05-18 20:27:55 · 362 阅读 · 0 评论 -
匿名管道 获取控制台输出
#include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ SECURITY_ATTRIBUTES saPipe; saPipe.nLength = sizeof(SECURITY_ATTRIBUTES); saPipe.lpSecurityDescriptor = NUL原创 2014-05-17 19:11:40 · 1986 阅读 · 0 评论 -
堆排序
void AdjustHeap(int *a, int len, int i){ int left = i * 2 + 1; int right = i * 2 + 2; if( left >= len ) return; int largest; if(left a[i]) largest = left; if(right a[largest原创 2014-05-15 23:04:54 · 372 阅读 · 0 评论 -
合并排序
void Merge(int *a, int s, int m, int e){ int lLen = m - s + 1; int rLen = e - m; int *l = new int[lLen]; int *r = new int[rLen]; int i = 0; for(i; i < lLen; i++) l[i] = a[s+i]; for(i = 0; i原创 2014-05-10 22:09:21 · 462 阅读 · 0 评论 -
单链表的反转
void InitList(Node *pHead){ Node* pList = pHead; int i = 0; for(; i < 10; i++) { Node *pNode = new Node; pNode->data = i; pNode->next = NULL; pList->next = pNode; pList = pNode; } }原创 2014-05-17 12:14:26 · 397 阅读 · 0 评论 -
中序遍历 后序遍历 恢复二叉树
中序遍历 后序遍历 恢复二叉树 数组存储原创 2014-06-20 19:42:54 · 720 阅读 · 0 评论