漫步云端

移动开发(Android、iPhone、Windows Mobile) | JAVA | C | C++ | .net | Objective C | 微软企业开发技术 | 嵌入式系统设计与开发
随笔 - 96, 文章 - 0, 评论 - 139, 阅读 - 86万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

12 2010 档案

摘要:本文转载自:http://www.infoq.com/cn/news/2008/08/beyondpolling 在OSCON '08大会上,Evan 'Rabble' Henshaw-Plath和Kellan Elliott-McCrea介绍了《超越REST?使用XMPP PubSub构建数据服务》。Robert Kaye对该幻灯片的报道如下: Kellan谈到了FriendFeed,它是一个让使用者知道他们的朋友共享了新项目的网站。在这个例子中,Kellan指出:为了给45000名使用者检查更新,FriendFeed向Flickr轮询了290万次。而且在这45000名使用者中,在任意时刻 阅读全文

posted @ 2010-12-31 22:43 charley_yang 阅读(2134) 评论(0) 推荐(1) 编辑

摘要:在局部域中的变量声明引入了局部对象(local object),有三种局部对象: 自动对象(automatic object)、寄存器对象( register object)以及局部静态对象(local static object)。 区分这些对象的是对象所在存储区的属性和生命期。自动对象所在存储区从声明它的函数被调用时开始,一直到该函数结束为止;寄存器对象是一种自动对象,它支持对其值的快速存 取... 阅读全文

posted @ 2010-12-19 22:05 charley_yang 阅读(1190) 评论(0) 推荐(0) 编辑

摘要:C++支持三种形式的域,局部域( local scope), 名字空间域 (namespace scope) 以及类域 (class scope)。 1. 局部域是包含在函数定义或者函数块中的程序文本部分。 2. 名字空间域是不包含在函数声明、函数定义或者类定义内的程序文本部分。 程序的最外层的名字空间域被称作全局域 (global scope )或全局名字空间域 (global namespac... 阅读全文

posted @ 2010-12-19 21:30 charley_yang 阅读(1602) 评论(0) 推荐(0) 编辑

摘要:一、函数指针的数组 我们可以声明一个函数指针的数组 例如 int (*testCases[10])(); 将 testCases 声明为一个拥有10个元素的数组,每个元素都是一个指向函数的函数指针,该函数没有参数,返回类型为 int 像数组testCases 这样的声明非常难读,因为很难分析出函数类型与声明的哪部分相关,在这种情况下使用 typedef名字可以使声明更为易读,例如 : // ty... 阅读全文

posted @ 2010-12-17 00:14 charley_yang 阅读(623) 评论(0) 推荐(0) 编辑

摘要:假定我们被要求提供一个如下形式的排序函数 :sort( start, end, compare ); start 和 end是指向字符串数组中元素的指针,函数 sort()对于 start 和end之间的数组元素进行排序,compare 定义了比较数组中两个字符串的比较操作(提供一个比较的策略【比较函数 】)。 为简化 sort()的用法而又不限制它的灵活性,我们可能希望指定一个缺省的比较函数。 ... 阅读全文

posted @ 2010-12-16 23:15 charley_yang 阅读(3444) 评论(1) 推荐(0) 编辑

摘要:第一、四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;... 阅读全文

posted @ 2010-12-15 23:47 charley_yang 阅读(118633) 评论(6) 推荐(24) 编辑

摘要:通常我们会把一系列的可能会被共有的小操作封装成一个函数供其他函数调用。比如min()函数封装了比较2个值大小的操作。 但是C++调用一个函数被直接计算一段代码慢很多。不但必须拷贝两个实参,保存机器的寄存器,程序还必须转向一个新位置。 inline 内联函数给出了一种解决方案。 若一个函数被指定为inline 函数,则它将在程序中每个调用点上被内联地展开,例如: int minVal2 = mi... 阅读全文

posted @ 2010-12-15 23:06 charley_yang 阅读(2166) 评论(0) 推荐(0) 编辑

摘要:一、缺省情况下,函数的返回值是按值传递的 这意味着得到控制权的函数将接收返回语句中指定的表达式的拷贝,例如: Matrix grow( Matrix* p ) { Matrix val; // ... return val; } grow()把存储在 val 中的值的拷贝返回到调用函数,但调用函数不能用任何方式修改val 。 二、该缺省行为可以被改变,一个函数可以被声明为返回一个指针或一... 阅读全文

posted @ 2010-12-15 22:36 charley_yang 阅读(3744) 评论(1) 推荐(0) 编辑

摘要:在 C++中,数组永远不会按值传递,它是传递第一个元素,准确地说是第 0个 的指针。 例如,如下声明 :void putValues( int[ 10 ] ); 被编译器视为 void putValues( int* ); 数组的长度与参数声明无关,因此,下列三个声明是等价的: // 三个等价的 putValues()声明 void putValues( int* ); void putValue... 阅读全文

posted @ 2010-12-14 23:09 charley_yang 阅读(6773) 评论(0) 推荐(0) 编辑

摘要:把参数声明成引用,实际上改变了缺省的按值传递参数的传递机制,在按值传递时,函数操纵的是实参的本地拷贝。 一、引用参数的三种常见用法: 1.需要改变实参的值,比如swap()。参数是引用时,函数接收的是实参的左值而不是值的拷贝。这意味着函数知道实参在内存中的位置,因而能够改变它的值或取它的地址。 2.向主调函数返回额外的结果。如下例:3.向函数传递大型的类对象。例如:class Huge { pu... 阅读全文

posted @ 2010-12-14 00:49 charley_yang 阅读(17863) 评论(1) 推荐(0) 编辑

摘要:系统为每个程序都提供了一个在程序执行时可用的内存池。 这个可用内存池被称为程序 的空闲存储区( free store) 或堆 (heap), 运行时刻的内存分配被称为动态内存分配(dynamic memory allocation)。 动态内存分配由 new 表达式应用在一个类型指示符 specifier 上来完成,类型指示符可以是内置类型或用户定义类型,new 表达式返回指向新分配的对象的指针... 阅读全文

posted @ 2010-12-12 15:30 charley_yang 阅读(705) 评论(0) 推荐(0) 编辑

摘要:首先要明确sizeof不是函数,也不是一元运算符,他是个类似宏定义的特殊关键字,sizeof();括号内在编译过程中是不被编译的,而是被替代类型。 如int a=8;sizeof(a);在编译过程中,它不管a的值是什么,只是被替换成类型sizeof(int);结果为4. 如果sizeof(a=6);呢,也是一样的转换成a的类型,但是要注意 因为a=6是不被编译的,所以执行完sizeof(a=6... 阅读全文

posted @ 2010-12-11 23:17 charley_yang 阅读(3784) 评论(1) 推荐(2) 编辑

摘要:vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件 : #include vector 使用vector有两种不同的形式,即所谓的数组习惯和 STL习惯。 一、数组习惯用法 1. 定义一个已知长度的 vector : vector int ivec( 10 ); //类似... 阅读全文

posted @ 2010-12-11 16:33 charley_yang 阅读(93998) 评论(9) 推荐(27) 编辑

摘要:1. 已知下面的数组定义 int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 }; 那么 只简单写 ia; 意味着什么呢 数组标识符代表数组中第一个元素的地址 它的类型是数组元素类型的指针 在ia这个例子中 它的类型是 int* 因此 下面两种形式是等价的 它们都返回数组的第一个元素的地址 ia; &ia[0]; 类似地 为了访问相应的值 我们可以取下列... 阅读全文

posted @ 2010-12-10 23:37 charley_yang 阅读(1113) 评论(0) 推荐(0) 编辑

摘要:声明了一个 int 型对象 而如下形式 int ia[10]; 1. 我们必须为数组指定一个大于等于 1 的维数,维数值必须是常量表达式—— 即:必须能在编译时刻计算出它的值 这意味着非 const的变量不能被用来指定数组的维数 ,下面的例子包含合法的和非法的数组定义 extern int get_size(); // buf_size 和 max_files 都是 const const i... 阅读全文

posted @ 2010-12-10 23:07 charley_yang 阅读(8644) 评论(0) 推荐(1) 编辑

摘要:1. 当表达式需要一个算术值时 布尔对象(如 found)和布尔文字都被隐式地提升成 int(正 如下面的例子) false 变成 0 而 true变成 1 例如 bool found = false; int occurrence_count = 0; while ( /* 条件省略 */ ) { found = look_for( /* 内容省略 */ ); // found 的值被提升... 阅读全文

posted @ 2010-12-10 22:46 charley_yang 阅读(8099) 评论(0) 推荐(1) 编辑

摘要:1. 引用 reference 有时候又称为别名 (alias), 它可以用作对象的另一个名字。 引用类型由类型标识符和一个取地址操作符来定义 引用必须被初始化 例如 int ival = 1024; // ok: refVal 是一个指向 ival 的引用 int &refVal = ival; // 错误 引用必须被初始化为指向一个对象 int &refVal2; 一旦引用已经定义, ... 阅读全文

posted @ 2010-12-10 22:35 charley_yang 阅读(537) 评论(0) 推荐(0) 编辑

摘要:const是C++中引入的一个新的关键字,它为C++编程带来了很大的方便。指向const对象的指针和const指针是两个名字很接近的概念,对于初学者来说非常容易搞混,这里对它们进行区分。   1、指向const对象的指针   可以这样理解指向const对象的指针:指向const对象的指针就是一个指针,不能通过它来修改它所指向的对象的值  声明方法:const int *p;  const对象在初始... 阅读全文

posted @ 2010-12-09 23:33 charley_yang 阅读(683) 评论(0) 推荐(0) 编辑

摘要:【规则】1、string为普通类型,不是数组型,只是其内容为字符串;2、’a’和”a”的区别:’a’为字符,”a”为字符串;单引号只能定义一个字符,双引号可以定义多个字符,即字符串。3、指针可以通过加减、自加减改变其值,数组不可以。4、以数组定义的字符串可以修改其中的字符,以指针定义的字符串不能修改其中的字符。 例如: char a[]=”hello”; //数组定义的字符串couta; /... 阅读全文

posted @ 2010-12-09 23:02 charley_yang 阅读(3064) 评论(0) 推荐(1) 编辑

摘要:从一个名为 in_file.txt 的文本文件中读取单词,然后把每个词写到一个名为out_file.txt的输出文件中 并且每个词之间用空格分开 阅读全文

posted @ 2010-12-08 23:05 charley_yang 阅读(2285) 评论(0) 推荐(0) 编辑

摘要:几个预处理指示符的使用 #include 头文件通过 include 预处理器指示符(preprocessor include directive) 而成为我们程序的 一部分 预处理器指示符用 # 号标识 这个符号将放在程序中该行的最起始一列上 处理 这些指示符的程序被称做预处理器 preprocessor 通常捆绑在编译器中 。 #ifndef 被包含的文件还可以含有#include 指示符... 阅读全文

posted @ 2010-12-08 22:38 charley_yang 阅读(1121) 评论(0) 推荐(0) 编辑

摘要:#includeiostream与#includeiostream.h及#inclue string 和 #include string.h的区别 1.从功能性的角度来讲,iostream包含了一系列模板化的I/O类,相反地iostream.h只仅仅是支持字符流。另外,输入输出流的C++标准规范接口在一些微妙的细节上都已改进,因此,iostream和iostream.... 阅读全文

posted @ 2010-12-08 22:07 charley_yang 阅读(5432) 评论(0) 推荐(1) 编辑

摘要:关于二叉树可以参考wiki:http://zh.wikipedia.org/zh-cn/%E4%BA%8C%E5%8F%89%E6%A0%91假如本程序要生成的二叉树如下:则创建二叉树输入的顺序为:8 7 5 1 –1 –1 –1 4 –1 –1 6 3 –1 –1 2 –1 -1除了-1节点之外的就是实际创建的二叉树-1不是实际的节点、输入-1仅表示子节点为空返回继续创建其他节点 阅读全文

posted @ 2010-12-08 15:05 charley_yang 阅读(8512) 评论(0) 推荐(0) 编辑

摘要:new、delete可以在一起使用,成对出现。 先看以下的两个简单的程序: 第一: //////////Visula C++ 6.0环境 第二: //////////Visual C++ 6.0环境 其中第一个程序存在错误(会生成.exe文件,但是运行有错误) 问题出在对new和delete、堆不是很了解。 而第二个程序是正确的。 现在我来分析一下: int *p=new int; 是在heap分... 阅读全文

posted @ 2010-12-08 11:13 charley_yang 阅读(1333) 评论(0) 推荐(1) 编辑

摘要:一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。 C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配... 阅读全文

posted @ 2010-12-08 11:05 charley_yang 阅读(124016) 评论(7) 推荐(25) 编辑

摘要:直接看代码说明: 执行结果:从结果可以看出:1. swapByRef方法是直接交换参数的指针执行的地址,所以指针指向的内容也换了2. swapByPoi方法只是操作指针指向的内容,指针执行的地址未变化 阅读全文

posted @ 2010-12-08 00:32 charley_yang 阅读(820) 评论(0) 推荐(0) 编辑

摘要:指针与引用看上去完全不同(指针用操作符’*’和’-’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?  首先,要认识到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你... 阅读全文

posted @ 2010-12-07 22:58 charley_yang 阅读(342) 评论(0) 推荐(0) 编辑

摘要:传递变量名,传递指针,传递引用 1.将变量名作为形参和实参 在这种情况下传给形参的是变量的值。传递是单向的,即如果在执行函数期间形参的值发生变化,并不传回给实参,这就是值传递方式。因为在调用函数期间,形参和实参不是同一个存储单元。结果:i=3,j=4i=3,j=4可以发现,执行函数swap后,形参a和b的改变不会影响实参i和j的值。2.传递变量指针形参是指针变量,实参是一个变量的地址,调用函数时,... 阅读全文

posted @ 2010-12-07 22:55 charley_yang 阅读(624) 评论(0) 推荐(0) 编辑

摘要:引用简介   引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。  引用的声明方法:类型标识符 &引用名=目标变量名;  【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名  说明:  (1)&在此不是求地址运算,而是起标识作用。  (2)类型标识符是指目标变量的类型。  (3)声明引用时,必须同时对其进行初始化。  (4)引用声明完毕... 阅读全文

posted @ 2010-12-07 22:37 charley_yang 阅读(345) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示