随笔分类 - c++
摘要:vector 表示一段连续的内存区域,每个元素被顺序存储在这段内存中,对vector的随机访问效率很高,但对非末尾元素的插入和删除则效率非常低。deque也表示N段连续的内存区域组成,但与vector不同的是它支持高效地在其首部插入和删除元素,它通过两级数组结构来实现,一级表示实际的容器,第二级指向容器的首和尾list表示非连续的内存区域并通过一对指向首尾元素的指针双向链接起来,插入删除效率高,随机访问效率低(从名字上可以很容易理解它为链表结构)可以看做 deque 为vector 和 list 的折衷
阅读全文
摘要:PID = `pidof xx`if [ $PID ]与 if [ -n $PID ]结果不一样,if 省略的是什么参数??if [ `ls` ] 会报有多余的参数,其余的命令都work的很好,这个是怎么回事?好像整体是一个测试 [] ,我想使用一个有或的逻辑表达式 使用的是if [ [1] ] || [ [2] ]其他的好像不行,有待于深入研究
阅读全文
摘要:pgrep 直接通过进程名字,比grep 要高效pkill 直接通过进程名字杀进程 还可以一次性杀死某个用户的所有进程pidof 进程名字 返回进程名字对应的pid 很实用
阅读全文
摘要:grep中去掉自己ps axu | grep [t]ty这个应该是正则表达式 暂时不知道是什么原理 orps axu | grep tty | grep -v grep -v 表示不选
阅读全文
摘要:char *a = NULL 与 char *str = "Hello" 是有区别的string初始化需要用后面一个String s=null;和 String s="" 效果是一样的,都将string初始化为空----------------------------------------------------------------我是邪恶的分割线----------------------------------------------------------------今天遇到了terminate called after throwing a
阅读全文
摘要:个人总结:注意SAX 和 DOM的区别遍历方法DOMElement *pRoot = xmlDoc->getDocumentElement()。一种是创建遍历树 DOMTreeWalker *walker = xmlDoc->createTreeWalker(pRoot, DOMNodeFilter::SHOW_TEXT, NULL, true),还有一种是通过迭代器来遍历整棵DOM树 DOMNodeIterator* iterator = xmlDoc->createNodeIterator(pRoot, DOMNodeFilter::SHOW_TEXT,NULL, tru
阅读全文
摘要:这个网址的概念讲的很清晰:http://www.w3school.com.cn/x.asp个人总结:XML DOM HTML 都是不同的东西注意<message>if salary < 1000 then</message> 是实体转义 '<' 的意思什么是 XML 元素?XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。(几乎任何东西都可以被称为元素)元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。<bookstore><book category="CHILDREN&qu
阅读全文
摘要:1.类型 c++ any 类型虽然可以作为一个任何类型变量进行使用,但是static_cast经常出错2.指针涉及到继承,指针相当复杂,特别容易出错。C++ 大家经常看到的断错误,大部分都是因为指针使用不当3.内存管理c++要自己管内存,十分容易内存泄露4.动态绑定能力 python可以把一个字符串作为一个函数调用,c++实现类类似功能比较麻烦5.包 python 各种包十分简单,由于有list 和 dict的帮助,学习使用起来十分方便
阅读全文
摘要:个人总结:很好用的任何类型。注意记住 any.type() == typeid(int)这种比较用法--------------------------------------------------------我是无情的分割线-----------------------------------------------------------------万能类型boost::anyboost库提供了any类,boost::any是一个能保存任意类型值的类,这一点有点像variant类型,不过variant由于采用了一个巨大的union,效率非常低。而boost利用模板,保存的时候并不改变值的
阅读全文
摘要:个人总结STL 中有队列的标准实现,为什么不用呢?但是如果想要用阻塞队列,那么必须要自己用锁构建了。下面是转载的详细:--------------------------------------------------------------------我是无情的分割线------------------------------------------------------------------------摘要:本文是“C++标准库导引系列”的一部分。在学习C语言的时候大家都知道,数据结构是对大量数据的组织的 方式。队列一直都一个重要的且存在典型应用的数据结构。C++标准库定义的队列是典型
阅读全文
摘要:个人总结:boost::shared_ptr 最主要的用途是多个指针可以指向同一个对象,这个指针内部维护了一个引用计数,当最后一个指针调用reset了之后,对象才会被析构以下是转载的详细说明。注意这个指针初始化的方式,一般有两种:boost::shared_ptr<implementation> sp1(new implementation());boost::shared_ptr<implementation> sp2 = sp1;判断是否为空:有一个bool类型转换操作符使得shared_ptr可用于需要的bool类型的语境下,比如我们通常用if(pointer)来
阅读全文
摘要:个人总结: 在python中就不用考虑类型转换这些,不过使用了C++ 没有办法~ static_cast顾名思义就是没有做类型检查 用法:static_cast < type-id > ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。 ②用于基本数据类型之间的转换
阅读全文
摘要:一个简单的例子安装 Google Protocol Buffer在网站 http://code.google.com/p/protobuf/downloads/list上可以下载 Protobuf 的源代码。然后解压编译安装便可以使用它了。安装步骤如下所示: tar -xzf protobuf-2.1.0.tar.gz cd protobuf-2.1.0 ./configure --prefix=$INSTALL_DIR make make check make install 关于简单例子的描述我打算使用 Protobuf 和 C++ 开发一个十分简单的例子程序。该程序由两部分组成...
阅读全文
摘要:uuid-dev产生唯一的uuid,不用维护一个全局的计数变量
阅读全文
摘要:c++ primer第三版笔记第16章 类 模 板1.template <class T>class QueueItem;类模板的定义和声明都以关键字template 开头。关键字后面是一个用逗号分隔的模板参数表,用尖括号<> 括起来这个表被称为类模板的模板参数表(template parameter list)。它不能为空,模板参数可以是一个类型参数,也可以是一个非类型参数。如果是非类型参数,则代表一个常量表达式。2.在模板参数表中,关键字class 和typename 的意义相同。在标准C++之前关键字typename 没有被支持。因为有时必须要靠它来指导编译器解释
阅读全文
摘要:个人的总结:为什么要使用? 它们可以实现类似函数指针的功能,却比函数指针更加灵活(体现在占位符上面),尤其是在很多成员调用同一个函数(仅仅是参数类型不同)的时候比较方便 这个是函数指针做不到的要注意的地方: 使用的时候一定要注意指向的是没有this指针的函数(全局函数或静态成员函数),还是有this指针的函数。后面一种必须要用bind()函数。而且要多一个参数。注意bind的参数顺序: bind(&要调用的函数,&对象, 要调用函数的参数1,要调用函数的参数2...,_1(bind函数的参数1),_2(bind函数的参数2)...)占位符号的参数是由 function 调用的时
阅读全文
摘要:让我们从一个非常简单的例子开始,如下:int n;这个应该被理解为“declare n as an int”(n是一个int型的变量)。接下去来看一下指针变量,如下:int *p;这个应该被理解为“declare p as an int *”(p是一个int *型的变量),或者说p是一个指向一个int型变量的指针。我想在这里展开讨论一下:我觉得在声明一个指针(或引用)类型的变量时,最好将*(或&)写在紧靠变量之前,而不是紧跟基本类型之后。这样可以避免一些理解上的误区,比如:int* p,q;第一眼看去,好像是p和q都是int*类型的,但事实上,只有p是一个指针,而q是一个最简单的int
阅读全文
摘要:有以下这样3个求加法的函数: 1 int Add(int x,int y) 2 { 3 return x+y; 4 } 5 6 double Add(double x,double y) 7 { 8 return x+y; 9 }10 11 long Add(long x,long y)12 {13 return x+y;14 }它们拥有同一个函数名,相同的函数体,却因为参数类型和返回值类型不一样,所以是3个完全不同的函数。即使它们是二元加法的重载函数,但是不得不为每一函数编写一组函数体完全相同的代码。如果从这些函数中提炼出一个通用函数,而它又适用于多种不同类型的数据,这样会使代码的重用率..
阅读全文
摘要:几乎所有稍微复杂点的程序都需要某种形式的引用计数智能指针。这些智能指针让我们不再需要为了控制被两个或多个对象共享的对象的生存期而编写复杂的逻辑。当引用计费降为零,没有对象再需要这个共享的对象,这个对象就自动被销毁了。引用计数智能指针可以分为插入式(intrusive)和非插入式(non-intrusive)两类。前者要求它所管理的类提供明确的函数或数据成员用于管理引用计数。这意味着在类的设计时就必须预见到它将与一个插入式的引用计数智能指针一起工作,或者重新设计它。非插入式的引用计数智能指针对它所管理的类没有任何要求。引用计数智能指针拥有与它所存指针有关的内存的所有权。没有智能指针的帮助,对象的
阅读全文
摘要:Boost智能指针——shared_ptrboost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法:#include <string>#include <iostream>#include <boost/shared_ptr.hpp>class implementation{public:~implementation() { std::cout <&
阅读全文

浙公网安备 33010602011771号