<?xml version="1.0" encoding="utf-8"?><!-- generator="WordPress/2.7.1" -->
<rss version="0.92">
<channel>
	<title>KELONG 's 私家花园</title>
	<link>http://kelong.yo2.cn</link>
	<description>傻傻的感触亦要永恒的记录</description>
	<lastBuildDate>Sat, 21 Nov 2009 15:36:21 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>c++：《数据结构》二分查找法</title>
		<description> 1 // ch09_02.cpp : 二分查找法
 2 //
 3 
 4 #include "stdafx.h"
 5 #include &#60;iostream&#62;
 6 #include &#60;cstdlib&#62;
 7 using namespace std;
 8 
 9 int bin_search(int data[50],int val);
10 int _tmain(int argc, _TCHAR* argv[])
11 {
12     int data[50];
13     int val=1;
14     for (int i=0;i&#60;50;i++)
15     {
16         data[i]=val;
17         val+=rand()%5+1;
18     }
19 
20     cout&#60;&#60;"数据内容："&#60;&#60;endl;
21     for (int i=0;i&#60;5;i++)
22     {
23         for (int j=0;j&#60;10;j++)
24             cout&#60;&#60;i*10+j+1&#60;&#60;"-"&#60;&#60;data[i*10+j]&#60;&#60;" ";
25         cout&#60;&#60;endl;
26     }
27 
28     cout&#60;&#60;"请输入搜索键值："&#60;&#60;endl;
29     while(1)
30     {
31         int num=0;
32         cin&#62;&#62;val;
33         if (val==-1)
34             break;
35         num=bin_search(data,val);
36         if (num==-1)
37             cout&#60;&#60;"没有找到"&#60;&#60;endl;
38         else
39             cout&#60;&#60;"在"&#60;&#60;num+1&#60;&#60;"处找到"&#60;&#60;data[num]&#60;&#60;endl;
40                 
41     }
42     cout&#60;&#60;endl;
43     system("pause");
44     return 0;
45 }
46 
47 int bin_search(int data[50],int val)
48 {
49     int low,high,mid;
50     low=0,high=49;
51     while(low&#60;=high &#38;&#38; val!=-1)
52     {    
53         mid=(low+high)/2;
54         if (val&#60;data[mid])
55         {
56             cout&#60;&#60;val&#60;&#60;"介于位置"&#60;&#60;low+1&#60;&#60;"["&#60;&#60;data[low]&#60;&#60;"]"&#60;&#60;"及中间位置"&#60;&#60;mid+1&#60;&#60;"["&#60;&#60;data[mid]&#60;&#60;"]"&#60;&#60;endl;
57             high=mid-1;
58         }
59         else if(val&#62;data[mid])
60         {
61             cout&#60;&#60;val&#60;&#60;"介于中间位置"&#60;&#60;mid+1&#60;&#60;"["&#60;&#60;data[mid]&#60;&#60;"]"&#60;&#60;"及最后位置"&#60;&#60;high+1&#60;&#60;"["&#60;&#60;data[high]&#60;&#60;"]"&#60;&#60;endl;
62             low=mid+1;
63         }
64         else 
65             return mid;
66     }
67     return -1;
68 }
69 
70  </description>
		<link>http://kelong.yo2.cn/archives/55432</link>
			</item>
	<item>
		<title>C++：《数据结构》顺序查找法</title>
		<description> 1 // ch09_01.cpp : 《数据结构》顺序查找法
 2 //
 3 
 4 #include "stdafx.h"
 5 #include &#60;iostream&#62;
 6 #include &#60;iomanip&#62;
 7 #include &#60;cstdlib&#62;
 8 using namespace std;
 9 
10 
11 int _tmain(int argc, _TCHAR* argv[])
12 {
13     int data[80],val;
14     int find=0;
15     for (int i=0;i&#60;80;i++)
16         data[i]=rand()%150+1;
17 
18     cout&#60;&#60;"==========数据内容：========="&#60;&#60;endl;
19     for (int i=0;i&#60;10;i++)
20     {
21         for (int j=0;j&#60;8;j++)
22             cout&#60;&#60;setw(2)&#60;&#60;i*8+j+1 &#60;&#60;" ["&#60;&#60;setw(3)&#60;&#60;data[i*8+j]&#60;&#60;"] ";
23         cout&#60;&#60;endl;
24     }
25 
26     cout&#60;&#60;"请输入搜索键值";
27     cin&#62;&#62;val;
28     while(val!= -1)
29     {
30         for (int i=0;i&#60;80;i++)
31             if (val==data[i])
32                 cout&#60;&#60;"在"&#60;&#60;i+1&#60;&#60;"的位置找到了键值"&#60;&#60;data[i]&#60;&#60;endl;
33                 find++;
34                 break;
35     
36     }
37     if (find==0)
38         cout&#60;&#60;"没有找到键值.";
39     
40     cout&#60;&#60;"==========数据内容：========="&#60;&#60;endl;
41     for (int i=0;i&#60;10;i++)
42     {
43         for (int j=0;j&#60;8;j++)
44             cout&#60;&#60;setw(2)&#60;&#60;i*8+j+1 &#60;&#60;" ["&#60;&#60;setw(3)&#60;&#60;data[i*8+j]&#60;&#60;"] ";
45         cout&#60;&#60;endl;
46     }
47     system("pause");
48     return 0;
49 } </description>
		<link>http://kelong.yo2.cn/archives/55431</link>
			</item>
	<item>
		<title>C++迭代器简介</title>
		<description>





除了使用下标来访问vector对象的元素外，标准库还提供了另一种检测元素的方法：使用迭代器（iterator）。迭代器是一种允许程序员检查容器内元素，并实现元素遍历的数据类型。

标准库为每一种标准容器（包括vector）定义了一种迭代器类型。迭代器类型提供了比下标操作更一般化的方法：所有的标准库容器都定义了相应的迭代器类型，而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用，现代C++程序更倾向于使用迭代器而不是下标操作访问容器元素，即使对支持下标操作的vector类型也这样。

第11章具体讨论迭代器的工作原理，但在完全了解它复杂的实现细节之前，我们一样可以先使用它。

1. 容器的iterator类型

每种容器类型都定义了自己的迭代器类型，如vector：

vector&#60;int&#62;::iterator iter;

这条语句定义了一个名为iter的变量，它的数据类型是由vector&#60;int&#62;定义的iterator类型。每个标准库容器类型都定义了一个名为iterator的成员，这里的iterator与迭代器实际类型的含义相同。

术语：迭代器和迭代器类型

程序员首次遇到有关迭代器的术语时可能会困惑不解，产生困惑的原因之一是由于本书中同一个术语iterator表示两个不同的事物。一般性提及的是迭代器的概念；而特别提及的则是由容器定义的具体的iterator类型，如vector&#60;int&#62;。

重点要理解的是，定义了许多用作迭代器的类型，这些类型在概念上是相关的。若一种类型支持一组确定的行为（这些行为允许程序员遍历容器内的元素，并允许程序员访问这些元素值），我们就称这种类型为迭代器。

不同的容器类定义了自己的iterator类型，用于访问容器内的元素。换句话说，每个容器定义了一种名为iterator的类型，而这种类型支持（概念上的）迭代器的各种行为。

2. begin和end操作

每种容器都定义了一对命名为begin和end的函数，用于返回迭代器。如果容器中有元素的话，由begin返回的迭代器指向第一个元素：

vector&#60;int&#62;::iterator iter = ivec.begin();

上述语句把iter初始化为由名为begin的vector操作返回的值。假设vector不空，初始化后，iter即指该元素为ivec[0]。

由end操作返回的迭代器指向vector的“末端元素的下一个”。通常称为超出末端迭代器(off-the-end iterator)，表明它指向了一个不存在的元素。如果vector为空，begin返回的迭代器与end返回的迭代器相同。

由end操作返回的迭代器并不指向vector中任何实际的元素，相反，它只是起一个哨兵（sentinel）的作用，表示我们已处理完vector中所有元素。

3. vector迭代器的自增和解引用运算

迭代器类型定义了一些操作来获取迭代器所指向的元素，并允许程序员将迭代器从一个元素移动到另一个元素。

迭代器类型可使用解引用操作符（*操作符）来访问迭代器所指向r 元素：

*iter = 0;

解引用操作符返回迭代器当前所指向的元素。假设iter指向vector对象ivec的第一个元素，那么*iter和ivec[0]就是指向同一个元素。上面这个语句的效果就是把这个元素的值赋为0。

迭代器使用自增操作符（1.4.1节）向前移动迭代器指向容器中下一个元素。从逻辑上说，迭代器的自增操作和int型对象的自增操作类似。对int对象来说，操作结果就是把int型值“加1”，而对迭代器对象则是把容器中的迭代器“向前移动一个位置”。因此，如果iter指向第一个元素，则++iter指向第二个元素。

由于end操作返回的迭代器不指向任何元素，因此不能对它进行解引用或自增操作。

4. 迭代器的其他运算

另一对可执行于迭代器的操作就是比较：用==或!=操作符来比较两个迭代器，如果两个迭代器对象指向同一个元素，则它们相等，否则就不相等。

5. 迭代器应用的程序示例

假设已声明了一个vector&#60;int&#62;型的ivec变量，要把它所有元素值重置为0，可以用下标操作来完成：

// reset all the elements in ivec to 0

for (vector&#60;int&#62;::size_type ix = 0; ix != ivec.size(); ++ix)

ivec[ix] = 0;

上述程序用for循环遍历ivec的元素，for循环定义了一个索引ix，每循环迭代一次ix就自增1。for循环体将ivec的每个元素赋值为0。

更典型的做法是用迭代器来编写循环：

// equivalent loop using iterators to reset all the elements in ivec to 0

for (vector&#60;int&#62;::iterator iter = ivec.begin();

iter != ...</description>
		<link>http://kelong.yo2.cn/archives/55101</link>
			</item>
	<item>
		<title>C++：比较三个数的大小（最基础版本）</title>
		<description> 1 #include "stdafx.h"
 2 #include &#60;iostream&#62;
 3 using namespace std;
 4 
 5 int _tmain(int argc, _TCHAR* argv[])
 6 {
 7     int a,b,c;
 8     cin&#62;&#62;a;
 9     cin&#62;&#62;b;
10     cin&#62;&#62;c;
11 
12     if (a&#62;b)
13     {
14         if (a&#62;c)
15         {
16             if (b&#62;c)
17                 cout&#60;&#60;"大到小排列为"&#60;&#60;a&#60;&#60;b&#60;&#60;c;
18             else
19                 cout&#60;&#60;"大到小排列为"&#60;&#60;a&#60;&#60;c&#60;&#60;b;
20         }
21         else
22             cout&#60;&#60;"大到小排列为"&#60;&#60;c&#60;&#60;a&#60;&#60;b;
23     }
24     else if (b&#62;c)
25     {
26             if (a&#62;c)
27                 cout&#60;&#60;"大到小排列为"&#60;&#60;b&#60;&#60;a&#60;&#60;c;
28             else
29                 cout&#60;&#60;"大到小排列为"&#60;&#60;b&#60;&#60;c&#60;&#60;a;            
30     }
31     else
32         cout&#60;&#60;"大到小排列为"&#60;&#60;c&#60;&#60;b&#60;&#60;a;    
33     cout&#60;&#60;endl;
34     
35     system("pause");
36     return 0;
37 }
 PS：本人连这都琢磨了很久很久，实在难以启齿，留这代码自己有用。 </description>
		<link>http://kelong.yo2.cn/archives/55021</link>
			</item>
	<item>
		<title>malloc 和 free in C</title>
		<description>内存管理            

                        
         在C里，内存管理是通过专门的函数来实现。另外，为了兼容各种编程语言，操作系统提供的接口通常是 C 语言写成的函数声明 （Windows 本身也由C和汇编语言写成）。
1 分配内存 malloc 函数
需要包含头文件：
#include "stdlib.h"
函数声明(函数原型)：
void *malloc(int size);
说明：malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定，void* 类型可以强制转换为任何其它类型的指针。
从函数声明上可以看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针，并且可以自动计算所需要大小。比如：
int *p;
p = new int; //返回类型为int* 类型(整数型指针)，分配大小为 sizeof(int);
或：　
int* parr;
parr = new int [100];      //返回类型为 int* 类型(整数型指针)，分配大小为 sizeof(int) * 100;　
而 malloc 则必须由我们计算要字节数，并且在返回后强行转换为实际类型的指针。　
int* p;　
p = (int *)      malloc (sizeof(int));　
第一、malloc 函数返回的是 void ...</description>
		<link>http://kelong.yo2.cn/archives/54452</link>
			</item>
	<item>
		<title>登陆失败: 用户帐户限制.可能的原因包括不允许空密码,登陆时间限制，或强制的策略限制.</title>
		<description>我家有2台电脑是用路由器连的网，然后设置完网上邻居 一打开就显示

登陆失败: 用户帐户限制.可能的原因包括不允许空密码,登陆时间限制，或强制的策略限制.

到底怎么回事啊````
先启用guest用户，然后进入组策略，依次点开：计算机配置--&#62;Windows设置--&#62;安全设置--&#62;用户权利指派，找到“拒绝从网络访问这台计算机”，把里面的guest用户删除。

解决方案:针对windows xp

1、运行gpedit.msc到组策略管理界面下,计算机配置---&#62;Winsows设置-----&#62;安全设置---&#62;本地策略---&#62;用户权利指派,看看右边有一行:"拒绝从网络访问这台计算机 "看它的属性里有没有guest一项,若有,则删除.

2、 若还不行,在我的电脑窗口里 工具---&#62;文件夹选项----&#62;查看-----&#62;高级选项里有"使用简单文件共享" 打勾去掉,确定下去,.然后再访问.

3、开始—运行—输入gpedit.msc回车—计算机配置—windows设置—安全设置—本地策略—安全设置—“账户：使用空白密码的本地账户只允许进行控制台登录”—改为“已禁用”。 </description>
		<link>http://kelong.yo2.cn/archives/53896</link>
			</item>
	<item>
		<title>[C++语法] 关键字typedef用法</title>
		<description>
C/C++语言中的typedef相信大家已经不陌生，本文对C/C++语言关键字typedef的各种用法作一个介绍。
typedef，顾名思义，为“类型定义”，可以解释为：将一种数据类型定义为某一个标识符，在程序中使用该标识符来实现相应数据类型变量的定义。例如：
 
typedef unsigned int UINT;
int main (int argc, char *argv[])
{
    unsigned int a;   // it’s OK
    UINT b; // it’s OK, a and b are of the same type (int)
    // . . .    // code references the symbol a and b
    return 0;
}
 
上面的代码中，a和b属于同一种数据类型（unsigned int型），因为UINT标识符已经标示为unsigned int类型。上面的代码看似简单，相信很多读者都用过这种方法，但这绝不是typedef的全部，下面介绍使用typedef定义复杂数据类型的几种用法。
 
1、 定义结构体类型
结构体是一种较为常见的数据类型，在C/C++程序设计中使用的非常广泛。下面的代码就是结构体类型的一个应用：
#include &#60;iostream.h&#62;
int main (int argc, char *argv[])
{
    struct {int x; int y;} point_a, point_b;
    point_a.x = 10; point_a.y = 10;
    point_b.x = 0; point_b.y = 0;
    ios::sync_with_stdio();
    cout &#60;&#60; point_a.x + point_a.y &#60;&#60; endl;
    cout &#60;&#60; point_b.x + ...</description>
		<link>http://kelong.yo2.cn/archives/52809</link>
			</item>
	<item>
		<title>[C++语法] 关键字typedef用法</title>
		<description>C/C++语言中的typedef相信大家已经不陌生，本文对C/C++语言关键字typedef的各种用法作一个介绍。
typedef，顾名思义，为“类型定义”，可以解释为：将一种数据类型定义为某一个标识符，在程序中使用该标识符来实现相应数据类型变量的定义。例如：
 
typedef unsigned int UINT;
int main (int argc, char *argv[])
{
 unsigned int a; // it’s OK
 UINT b; // it’s OK, a and b are of the same type (int)
 // . . . // code references the symbol a and b
 return 0;
}
 
上面的代码中，a和b属于同一种数据类型（unsigned int型），因为UINT标识符已经标示为unsigned int类型。上面的代码看似简单，相信很多读者都用过这种方法，但这绝不是typedef的全部，下面介绍使用typedef定义复杂数据类型的几种用法。
 
1、 定义结构体类型
结构体是一种较为常见的数据类型，在C/C++程序设计中使用的非常广泛。下面的代码就是结构体类型的一个应用：
#include &#60;iostream.h&#62;
int main ...</description>
		<link>http://kelong.yo2.cn/archives/52808</link>
			</item>
	<item>
		<title>VC: const和static的区别使用</title>
		<description>使用const。
    这一点在很多经典的关于C 和C++的书籍中是必谈的要点。在《Exceptional C++》一书中，对这点有很精彩的描述，现摘录如下：“没有正确的安全意识的枪手在世界上是不可能活的很长的。const 观念不正确的程序员也是一样和没有时间戴紧帽子的正确，没有时间检查带电电线的电工一样不会活的很长。”在C 语言中，const 修饰符表示告诉编译器此函数将不会改变被修饰的变量的指向的任何值（除了强制类型转换）。当把指针作为参数传递时，总是合适地使用const，不仅可以防止你无意中错误的赋值，而且还可以防止在作为参数将指针传递给函数时可能会修改了本不想改变的指针所指向的对象的值。如：
const int num= 7;
num = 9; //有/可能得到编译器的警告。
const char *ptr，则表示该指针所指向的内容不会被改变，如果在程序中被发生对其赋值的操作，编译时将出错误提示。如：
const char *ptr = “hello”;
*ptr = 'H';//错误，所指内容不可改变也可将const 放在星号后面来声明指针本身不可改变。如:
char* const ptr;
ptr++; //错误，指针本身不可改变
也可同时禁止改变指针和它所引用的内容，其形式如下： const char* const ptr;
使用static
    static 是一个能够减少命名冲突的有用工具。将只在一个模块文件中的变量和函数使用static 修饰，将不会和其他模块可能具有相同名称的函数和变量在模块连接时不会产生名称冲突。一般来说，只要不是提供给其它模块使用的函数，和非全局变量，均应使用static 修饰。将子程序中的变量使用static 修饰时，表示这个变量在程序开始时分配内存，在程序结束时释放，它们在程序执行期间保持它们的值。如：
void func1(void)
{
static int time = 0;
time++
}
void func2(void)
{
static int time = 0;
time++;
}
两个子程序中的time 变量使用static 修饰，所以它们是静态变量，每调用一次time将进行加1，并保持这个值。它们的功能与下面程序相似：
int time1 = 0;
int time2 ...</description>
		<link>http://kelong.yo2.cn/archives/52257</link>
			</item>
	<item>
		<title>百毒又自称民族企业了，我不能忍了！！</title>
		<description> 
        一个全额美资的在英属维尔京群岛注册的外国公司，老板有绿卡，在美国上市回报美国市民的企业还自吹民族企业……
         PS：本文非原创，欢迎百度公关部发邮件来索要证据。 </description>
		<link>http://kelong.yo2.cn/archives/52200</link>
			</item>
</channel>
</rss>