随笔分类 -  c++

摘要:多个线程是“同时”执行的多个任务;定时可以看作是在本线程内插入的任务。如果需要多个任务同时执行,就要用多线程;如果需要每隔一段时间做某件事就用定时。多线程相对复杂一些,占用系统资源略多一些,所以如果能不用多线程时尽量不用。定时器和多线程没啥关系,定时器是一个线程中的任务 阅读全文
posted @ 2014-03-19 16:35 zzyoucan 阅读(1933) 评论(0) 推荐(0)
摘要:在使用MongoDB的时候,经常会用到MongoDB的删除操作,以下是我在使用MongoDB删除操作的总结 首先是删除用户: db.removeUser("用户名") 其次是删除数据库: db.dropDataBase() ,这个操作会删除你当前正在使用的数据库。 然后是删除集合: db.集合名.d... 阅读全文
posted @ 2014-03-19 09:48 zzyoucan 阅读(1164) 评论(0) 推荐(0)
摘要:#include//ECHO.CPPvoid main(int argc,char *argv[]) { for(int i=0;i<argc;i++)cout<<argv[i]<<'\t'; cout<<'\n';} int argc;//表示读入字符串个数char *argv[];//指针数组,用来存放读入的字符串程序的意思逐个输出所有读入的字符串,每个字符串间空一个制表符间隔 阅读全文
posted @ 2014-03-19 09:17 zzyoucan 阅读(160) 评论(0) 推荐(0)
摘要:原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。如果要指定大小使用char* strncpy( char*dest, char*src, size_tnum ); 阅读全文
posted @ 2014-03-17 15:31 zzyoucan 阅读(498) 评论(0) 推荐(0)
摘要:#include #include #include #include #include #include using namespace std;using namespace boost::property_tree; int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); string s = "{/"age/" : 26,/"study/":{/"language/":{/"one/":/"chinese/&qu 阅读全文
posted @ 2014-03-13 10:53 zzyoucan 阅读(1170) 评论(0) 推荐(0)
摘要:语法: const char *c_str();搜索c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 比如:最好不要这样: char* c; string s="1234"; c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理应该这样用: char c[20]; string s=& 阅读全文
posted @ 2014-03-12 10:51 zzyoucan 阅读(2660) 评论(0) 推荐(0)
摘要:MongoDB之bson的介绍1. 什么是bsonBSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。BSON可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是BSON是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想,BSON有三个特点:轻量性、可遍历性、高效性{“hello":"world"} 这是一个BSON的例子,其中 阅读全文
posted @ 2014-03-11 18:23 zzyoucan 阅读(1004) 评论(0) 推荐(0)
摘要:C++ 异常使用 try、catch 和 throw 关键字。引发表达式指示错误或异常情况。 可以将任何类型的对象用作引发表达式的操作数。 此对象通常用于传达有关错误的信息。 通常,应使用在标准库中定义的 std::exception 类或某个派生类,或者,如果这些都不适用,则从 std::exception 派生自己的异常类。try 块封装一个或多个可能引发异常的语句。一个或多个 catch 块紧跟在 try 块之后。 每个 catch 块指定它能处理异常的类型。以下语法显示一个示例 try 块及其处理程序。 假设 GetNetworkResource() 通过网络连接获取数据,并且两个异常 阅读全文
posted @ 2014-03-11 16:01 zzyoucan 阅读(659) 评论(0) 推荐(0)
摘要:1、虚基类的作用从上面的介绍可知:如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多份同名成员。在引用这些同名的成员时,必须在派生类对象名后增加直接基类名,以避免产生二义性,使其惟一地标识一个成员,如 c1.A::display( )。在一个类中保留间接共同基类的多份同名成员,这种现象是人们不希望出现的。C++提供虚基类(virtual base class )的方法,使得在继承间接共同基类时只保留一份成员。现在,将类A声明为虚基类,方法如下:class A//声明基类A{…};class B :virtual public... 阅读全文
posted @ 2014-03-11 10:55 zzyoucan 阅读(480) 评论(0) 推荐(0)
摘要:每次遇到vs配置都要让我头疼一段时间,对于某些不太清楚,有时自己试着配置,能运行起来就行,下次又忘了咋陪的了,其中配置的东西真心多。1.输出目录这样配置../../Bin/Server/这个路径是相对于vcproj文件的路径,也就是项目文件的路径2.无法启动程序 E:\.dll配置属性中调试中 "命... 阅读全文
posted @ 2014-03-10 22:59 zzyoucan 阅读(429) 评论(0) 推荐(0)
摘要:1>LINK : fatal error LNK1104: 无法打开文件“..\..\..\Bin\Server\DBCenter.dll”原来是别的程序在使用这个文件,害得我查了半天。 阅读全文
posted @ 2014-03-10 11:26 zzyoucan 阅读(211) 评论(0) 推荐(0)
摘要:1 动态语言和静态语言 通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。 1 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。 2 静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C... 阅读全文
posted @ 2014-03-09 13:17 zzyoucan 阅读(993) 评论(0) 推荐(1)
摘要:Defined in headertemplateclassshared_ptr;(since C++11)std::shared_ptris a smart pointer that retains shared ownership of an object through a pointer. Severalshared_ptrobjects may own the same object; the object is destroyed when the last remainingshared_ptrpointing to it is destroyed or reset. The o 阅读全文
posted @ 2014-03-08 15:45 zzyoucan 阅读(470) 评论(0) 推荐(0)
摘要:auto_ptr是C++标准库中()为了解决资源泄漏的问题提供的一个智能指针类模板(注意:这只是一种简单的智能指针)auto_ptr的实现原理其实就是RAII,在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来就像普通的指针。std::auto_ptr pa(new ClassA);下面主要分析一下auto_ptr的几个要注意的地方:1,Transfer of Ownershipauto_ptr与boost库中的share_ptr不同的,auto_ptr没有考虑引用计数,因此一个对象只能由一个auto_ptr所拥有,在给其他auto_ptr赋值的时候,会转移这种拥有 阅读全文
posted @ 2014-03-08 13:18 zzyoucan 阅读(355) 评论(0) 推荐(0)
摘要:Utilities 由短小精干的类和函数构成,执行最一般性的工作。 这些工具包括: general types 一些重要的C函数 numeric limitsPairs C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象 classpair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/value)的成对元素。 pair被定义为struct,因此可直接存取pair中的个别值.两个pairs互相比较时, 第一个元素正具有较高的优先级. 例: namespace std{ template bool operator.. 阅读全文
posted @ 2014-03-07 16:30 zzyoucan 阅读(1438) 评论(0) 推荐(0)
摘要:调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议。这种协议规定了该语言的函数中的参数传送方式、参数是否可变和由谁来处理堆栈等问题。不同的语言定义了不同的调用约定。 在C++中,为了允许操作符重载和函数重载,C++编译器往往按照某种规则改写每一个入口点的符号名,以便允许同一个名字(具有不同的参数类型或者是不同的作用域)有多个用法,而不会打破现有的基于C的链接器。这项技术通常被称为名称改编(Name Mangling)或者名称修饰(Name Decoration)。许多C++编译器厂商选择了自己的名称修饰方案。 因此,为了使其它语言编写的模块(如 阅读全文
posted @ 2014-03-07 15:45 zzyoucan 阅读(320) 评论(0) 推荐(0)
摘要:示例代码如下:#include int asdf(int a){ printf("%d\n",a); return 0;}int main(){ int (*p)(int); asdf(5); p=asdf; (*p)(5); p(5); printf("asdf is %d,p is %d,*p is %d\n",asdf,p,*p); return 0; }问题,为什么asdf(5),(*p)(5),p(5)三种调用都正确且都能输出正确结果?解答:首先需要明确的一点:函数名不是指针,数组名也不是指针。函数名只是在编程时候代指函数入口地址的符号,函数入 阅读全文
posted @ 2014-03-06 23:48 zzyoucan 阅读(1654) 评论(0) 推荐(3)
摘要:“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种:一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是 delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用 阅读全文
posted @ 2014-03-06 22:18 zzyoucan 阅读(617) 评论(0) 推荐(0)
摘要:bind - boost头文件: boost/bind.hppbind 是一组重载的函数模板.用来向一个函数(或函数对象)绑定某些参数. bind的返回值是一个函数对象.它的源文件太长了. 看不下去. 这里只记下它的用法:9.1 对于普通函数假如有函数 fun() 如下: void fun(int x, int y) { cout (f, 3)(); //指出返回值的类型 void 9.2 对于非静态成员函数假如有: struct A { void func(int x, int y) { cout ptr_a(pa); //智能指针. 现在要向像 A::func 这样的非静态... 阅读全文
posted @ 2014-03-06 18:18 zzyoucan 阅读(1228) 评论(0) 推荐(0)
摘要:map映照容器的元素数据是一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系。 map映照容器的数据结构是采用红黑树来实现的,插入键值的元素不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来。 使用map容器需要头文件包含语句“#include”, map文件也包含了对multimap多重映照容器的定义。 1、map创建、元素插入和遍历访问 创建map对象,键值与映照数据的类型由自己定义。在没有指定比较函数时,元素的插入位置是按键值由小到大插入到黑白树中去的,下面这个程序详细说明了如何操作ma... 阅读全文
posted @ 2014-03-06 15:52 zzyoucan 阅读(342) 评论(0) 推荐(0)