自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 收藏
  • 关注

原创 几种常见排序算法的实现(冒泡法,选择法,插入法,快速排序、堆排序)

#include "stdafx.h"//in the i th round ordering, j always points to the max element so farvoid bubble_sort(int *a, int len){ for(int i=0; i<len-1; i++) { for(int j=0; j<len-1-i; j++) { if

2014-05-13 23:05:49 671

原创 关于虚继承需要注意的几个问题

1、在普通继承中,D和A的关系是B is a A, 在虚继承中,B和A的关系是B has a A

2014-05-04 17:11:49 1561

原创 智能指针的一种实现

std的auto_ptr实现了接口get

2014-04-28 22:28:40 505

原创 Game of Paper, Rock and scissors

Paper-Scissors-Rock is a game for two players. Each player simultaneously opens his/her hand to display a symbol:* Fist equals rock,* Open hand equals paper,* Showing the index and middle finger

2014-04-25 22:17:57 952

转载 C++智能指针的对比

一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、boost::s

2014-04-24 17:14:01 593

原创 The minimum number of elements to reach the end of an array

Given an array of integers, each element represents the max number of jumps that you can move forward.Write a piece of code to find out the minimum number of elements you need to select to reach the

2014-04-02 21:41:33 671

原创 Apollo Rule Reverse

1. The string consist of ASCII characters.2. There are three types of segment in string: word, non-word and "#".Word begins with letter which can be followed with every character except ‘#’(e.g. ‘

2014-04-02 20:59:24 581

转载 C++模板

原来...C++ template1.自定义Stack模板类#include #include template class Stack { private: std::vector elems; // elements public: void push(T const&); // push element void pop(

2014-02-24 14:42:41 522

原创 队列另一种实现(链表)

头文件typedef struct Node{ int val; Node *next; Node(){next=NULL;} Node(int v) { val = v; next = NULL; }}Node;class QueueList{public: QueueList(int max); ~QueueList(); int pop(); vo

2014-02-21 16:43:59 504

原创 栈的一种实现(数组)

头文件const int MAX_STACK_NUM = 4;class Stack{public: Stack(); ~Stack(); int pop(); void push(int x); int peek() const; int count();private: int m_pos;//m_pos-1为栈顶元素的位置 int m_data[MAX_STA

2014-02-20 17:22:14 515

原创 队列的一种实现(数组)

头文件const int MAX_QUEUE_NUM = 4;class Queue{public: Queue(); ~Queue(); int pop(); void push(int x); int getFront() const; int count();private: int m_pos;//记录第一个元素的位置 int m_count; int m

2014-02-20 17:17:28 551

原创 back_inserter & front_inserter & inserter的用法

这几种iterator一般用于copy类型的函数,如sort_copy, copy, unique_copy,因为copy系列的函数不检查dest参数的有效性,即是否已经分配了内存#include #include #include #include templatevoid print(T &vec){ for(auto iter=vec.begin(); iter !

2013-11-22 17:05:58 2212

原创 std::sort & unique的用法示例

这两个通用函数主要用于vector。其他container如list有自己的sort和unique方法示例:#include #include #include int main(int argc, char **argv){ int array1[] = {10, -7, 3, 4, 4, -7}; vector myset(array1, ar

2013-11-22 16:29:04 1572

原创 调用运算符和转换运算符--两个容易混淆的运算符

***************************************************************************** 重载调用操作符 () // 也称函数对象 定义了调用操作符 () 的类,其对象常称为函数对象,它比函数更加灵活和方便 函数对象常用于通用算法的实参 可以为类的对象重载调用操作符 () ,如用结构实现的求绝对值的结构

2013-09-18 11:37:39 634

原创 成员函数和友元函数的选择方案指导原则

成员函数和非成员函数 ( 友元函数 ) 选择方案   通常对类本身的操作 ,( 如赋值 =, 下标 [], 调用 (), 成员访问符 ->, 自增 ++, 自减 --) 请选择成员函数   通常对两个对象进行操作 ,( 如算术操作 , 位操作符 , 关系操作 , 输入输出 ) 请选择非成员函数 , 就是用友元函数实现 成员 / 非成员函数重载选择指导 一元操作符就是操作符有一个对象

2013-09-18 11:27:09 885

原创 Constructor/Destructor/Copy Constructor/operator =

1) If you have created any constructors or even copy constructors, the compiler won't create default constructor for you.2) operator =, copy constructor and destructor are siblings, if we overwrite

2013-09-17 17:16:07 868

原创 std::map [] operator 和 insert 的区别

如果key已经存在,[] operator会将key对应的value用新值替换,而insert会返回一个pair说这组元素已经存在。如果key不存在,二者效果相同示例:void print(std::map &intmap){ using namespace std; auto iter = intmap.begin(); for(; iter != intmap.end(

2013-09-13 10:29:35 2084

原创 R6025调用纯虚函数错误

class A; void fcn( A* ); class A { public: virtual void f()=0; A() { fcn(this); } }; class B : A { void f() { } }; void fcn( A* p ) { p->f();//h

2013-08-20 16:46:15 1441 1

原创 stream_iterator的用法

#include #include #include #include #include using namespace std;int main(){ istringstream ss("abc dfn fasd nny"); istream_iterator in(ss); istream_iterator end; vector vec_tmp

2013-08-20 16:31:13 647

原创 关于VS的release版本调试

有时我们自己写的代码只能用release版本(比如调用第三方库只提供release版本,如果自己的那部分代码使用debug版本的话,两边版本不匹配经常会出问题),但是又希望针对自己的写的那部分代码调试,这个时候可以用这个方法在VS中选择project--》右键property--》c/c++--》optimization找到optimization项,将maximize speed/O2 修改

2013-07-25 10:18:17 683

原创 BOOST_FOREACH

#include BOOST_FOREACH(p1, p2)对于vector vec; p1的类型是vector::reference &p2即vec;对于map myMap;p1的类型是map::value_type &p3, 注意这里的p3是一个pair类型pairp2的类型是 myMap

2013-07-08 17:45:40 560

原创 boost posix_time/time_duration/date 的基本用法

头文件和命名空间#include using namespace boost::posix_time;using namespace boost::gregorian; 构造函数1.std::string ts("2002-01-20 23:59:59.000");ptime t(time_from_string(ts))2.std::string

2013-07-08 13:47:22 18548

原创 Qt VS2010 编译static版本

参考文章qt http://blog.csdn.net/aslucky/article/details/6299319编译步骤如下C:\D_Drive\Qt4.7.3\mkspecs\win32-msvc2010\qmake.confQMAKE_CFLAGS_RELEASE    = -O2 -MD  QMAKE_CFLAGS_RELEASE    = -O2 -MT

2013-07-05 09:28:43 653

原创 组播程序示例

小结:1. 发送端也需要绑定网卡地址,目的是告诉协议栈,发送端的数据要往哪个子网“广播”。2. 接收端bind绑定的地址与组播毫无关系,如果一个普通的udp发送端往接收端bind的地址值发数据,接收端也可以收到,也就是说,一个用组播的接收端,也可以收到单播的数据!3. 对组播的一些理解:发送端绑定一个网卡地址(端口任意),目的地址为组播地址时,系统先把数据“广播”到与发送端的源地址所在

2013-05-21 18:59:12 1075 1

转载 wchar_t*和 char*之间的转换

把char*转换为wchar_t*用stdlib.h中的mbstowcs_s函数,可以通过下面的例子了解其用法: char *CStr = "string to convert";size_t len = strlen(CStr) + 1;size_t converted = 0;wchar_t *WStr;WStr=(wchar_t*)

2013-05-21 17:54:51 662

原创 查询GetLastError返回值含义的方法

net helpmsg errorno比如 net helpmsg 10093Either the application has not called WSAStartup, or WSAStartup failed.

2013-05-21 17:51:52 697

原创 VS2010 cannot attach x64 process on x64 machine

My VS2010 was installed on x64 machine. I find that it cannot attach x64 process but it works well when attaching x86 process.After having Googled, I got the answer that there is a file name Program

2013-05-10 17:00:08 633

转载 C++ function、bind以及lamda表达式

本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制。之所以把这三块放在一起讲,是因为这三块之间有着非常密切的关系,通过对比学习,加深对这部分内容的理解。在开始之间,首先要讲一个概念,closure(闭包),这个概念是理解lambda的基础。下面我们来看看wikipedia上对于计算机领域的closure的定义:

2013-05-06 17:05:20 2490

原创 report for economy analysis

The Recycling industry is slowly on the road to recovery after going through an economic rollercoaster ride. A year ago, there was high demand for scrap steel, metals and other recyclable products, le

2012-12-14 10:42:56 426

原创 appeal to recycling

Ladies and gentlemen, thank you for coming to today's talk about environmental changes. I cannot stress enough how important it is to protect our environment! In the last few years air pollution has r

2012-12-14 10:17:35 470

原创 文件操作

1、        重定向1)Linux2.6.9上,一个进程可以打开的文件描述符为1024个,WindowsXP sp3上为512个,均包括默认打开的stdin,stdout以及stderr。每次fopen返回新的FILE结构,其中_file记录了当前文件描述符(int类型),_flag记录文件打开方式(1为读,2为写,128为读写)。 2)freopen并不创建新的FILE结构,也

2012-12-11 17:53:30 415

原创 生产者消费者模型(为什么使用两个信号量?)

生产者消费者模型中需要2个信号量,1个互斥量。大致过程如下:P操作:            申请资源,S=S-1。如果S>0,则继续。否则线程阻塞,放入等待队列。V操作:            释放资源,S=S+1。如果S>0,则继续。否则唤醒等待队列中的第一个线程。Semaphore empty(N), full(0);Mutex mutex;

2012-12-07 17:46:35 3720

原创 协议设计和架构

1、        IDM项目中控制报文的确认机制以及socket使用方式:1)串行方式:即在进行下一个业务之前,当前业务必须完成“发送-接收确认”的过程。这种方式不需要ack队列,因为当前业务未完成之前,不会开始下一个业务,所以收到的ack即是针对当前业务的。之后根据这个ack和其关联的业务进行下一步处理,比如根据ack回复的tcp端口号和业务的qos信息,建立tcp连接开始发送文件。目

2012-12-07 17:45:56 453

原创 调试和排错

1、        调试bug的几种方法1)排除法,可是通过逐段注释代码,运行程序,可问题是否重现。如果注释某段代码后,问题消失,则可将问题定位到该段代码。2)加强条件法,如果一个问题需要很长时间才能复现,则可以猜测问题的所在,加强其条件,比如增加其循环次数,缩短其每次运行时间间隔等,让其快速复现。3)单独提取——模拟条件法,如果一个问题的出现依赖其他模块给予初始值或者需要等待其他模块

2012-12-07 17:44:14 383

原创 关于在析构函数中释放内存

当你提供的API需要分配内存时,可以考虑创建一个对象保存新分配内存的地址,然后在对象析构时释放内存。这样用户不用担心忘记释放内存。需要注意的是,如果用户创建了这种对象并得到新分配的内存地址后,并不立即处理,而是放到一个队列中,这个时候需要特别注意该对象的析构导致过早的释放了内存,使队列中记录的内存地址变成一个无效的地址!这个时候,其实根据C++Primer,我们已经重载了析构函数,则也应该

2012-12-07 17:40:27 3561 1

原创 进程表、文件描述符表、文件表的关系

进程表中有一个文件描述符表,这个文件描述符表记录了进程打开的文件描述符、其close_on_exec标志,以及一个指向文件表的指针。文件每打开一次(API的open或者C的fopen),内核就创建一个文件表,这个文件表包含,文件状态标志(读、写、添加、同步、非阻塞等)、当前文件偏移量、指向该文件v节点的指针。 文件描述符表   文件描述符  文件描述符标志  文件表指针文件表

2012-12-07 17:39:02 627

原创 Windows核心编程

1、        句柄1)伪句柄:GetCurrentThread()、GetCurrentProcess得到的句柄是伪句柄,只能在本线程、进程中使用。2)什么是句柄?句柄的作用?通过传递句柄给系统API,获取相关资源。句柄相当于一个加密后的指针,避免用户直接操作内核对象。2、        一些系统API返回值的含义1) WAIT_ABANDONED:Thespecified

2012-12-07 16:56:14 504

原创 编译和编译选项

1、        动态链接库的编译Windows下编译动态链接库需要加关键字__declspec,如下:dll的导入:__declspec(dllimport)dll的导出:__declspec(dllexport) Linux下编译动态链接库,没有关键字gcc myfunc.c -shared -o libmyfunc.so 2、        动态链接库的加载

2012-12-07 16:54:12 466

原创 函数调用时堆栈是如何分配的

函数调用时堆栈是如何分配的?使用VC2005在i386系列机器上进行试验,发现与编译选项有很大的关系。使用cl.exe不加任何选项直接编译,结果大致如下高地址函数调用堆栈高地址传入参数 返回地址 调用函数的EBP值 局部变量 局部变量数组 。。。(标注1)低地址

2012-12-03 17:37:09 497

原创 要点

1、函数调用堆栈2、如何知道异步IO什么时候完成3、单项链表逆序4、策略模式如何实现动态调用5、编译的两个阶段

2012-11-20 17:21:51 280

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除