转载:嵌套类相关

  在一个类的内部定义另一个类,我们称之为嵌套类(nested class),或者嵌套类型。之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。
 
   虽然嵌套类在外围类内部定义,但它是一个独立的类,基本上与外围类不相关。它的成员不属于外围类,同样,外围类的成员也不属于该嵌套类。嵌套类的出现只是告诉外围类有一个这样的类型成员供外围类使用。并且,外围类对嵌套类成员的访问没有任何特权,嵌套类对外围类成员的访问也同样如此,它们都遵循普通类所具有的标号访问控制。
 
   若不在嵌套类内部定义其成员,则其定义只能写到与外围类相同的作用域中,且要用外围类进行限定,不能把定义写在外围类中。例如,嵌套类的静态成员就是这样的一个例子。
 
   前面说过,之所以使用嵌套类的另一个原因是达到底层实现隐藏的目的。为了实现这种目的,我们需要在另一个头文件中定义该嵌套类,而只在外围类中前向声明这个嵌套类即可。当然,在外围类外面定义这个嵌套类时,应该使用外围类进行限定。使用时,只需要在外围类的实现文件中包含这个头文件即可。
 
   另外,嵌套类可以直接引用外围类的静态成员、类型名和枚举成员,即使这些是private的。

转载链接:

https://blog.csdn.net/rabbit729/article/details/3334272

https://blog.csdn.net/rabbit729/article/details/3334272

[转载] 大量的C++ VC相关电子书

03-05

[url=http://www.t00y.com/file/17464414]Visual C++视频会议开发技术与实例.吴志军.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464415]Visual.C++.MFC棋牌类游戏编程实例.pdf[/url]rn[url=http://www.t00y.com/file/17464416]Visual.C++2008入门经典(中文高清版).pdf[/url]rn[url=http://www.ctdisk.com/linker/701298]大量的C++电子书pdf[/url]rn[url=http://www.t00y.com/file/17464417]VISUAL.C++全能速查宝典.明日科技刘锐宁,梁水,宋坤.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464419]visual.c++黑客编程揭秘与防范..梁洋洋.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464420]Viusal C++ 开发典型模块大全.pdf[/url]rn[url=http://www.t00y.com/file/17464421]WINDOWS.核心编程第五版.pdf[/url]rn[url=http://www.t00y.com/file/17464422]Windows编程循序渐进(清晰完整版).pdf[/url]rn[url=http://www.t00y.com/file/17464423]《3D绘图程序设计使用Direct3D 109和OpenGL 2.0》(3D绘图程序设计使用Direct3D 109和OpenGL 2.0)扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464424]小小黑客之路--黑客工具、攻防及防火墙编程入门.葛垚.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464425]深入解析ATL(第2版).(美)塔瓦瑞斯.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464426]竹林蹊径:深入浅出Windows驱动开发(补全版).张佩,马勇,董鉴源.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464428]精通DirectX.3D图形与动画程序设计.王德才.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464429]网络安全编程技术与实例.pdf[/url]rn[url=http://www.t00y.com/file/17464430]零基础学Visual.c++.李翠霞扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464403]300dpi高清版C++.Cookbook.中文版_HD.pdf[/url]rn[url=http://www.t00y.com/file/17464404]C++ GUI.Qt.4编程(第二版)(加)布兰切特,(英)萨默菲尔德.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464405]C++ primer中文版第4版.pdf[/url]rn[url=http://www.t00y.com/file/17464406]C语言入门经典(第四版).(美)霍顿.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464407]DirectX游戏开发终极指南.(Ultimate.Game.Programming.With.DirectX).(美).Allen.Sherrod.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464408]DirectX角色扮演游戏编程.(Programming.Role.Playing.Games.with.DirectX.2ed).(美)Jim.Adams.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464409]OpenGL超级宝典.(第4版).(OpenGL.SuperBible).(美)Richard.S.Wright.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464410]Visual C++2005入门.pdf[/url]rn[url=http://www.t00y.com/file/17464411]Visual C++开发实战1200例.第1卷.刘锐宁.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17464412]Visual C++开发技术大全.pdf[/url]rn[url=http://www.t00y.com/file/17464413]VISUAL C++编程宝典.十年典藏版.明日科技刘锐宁,李伟明,梁水.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17317540]游戏人工智能编程案例精粹.(Programming.Game.AI.by.Example).(美)Mat.Buckland.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17317543]游戏编程All.In.One.(Game.Programming.All.in.One).(美)Bruno.Miguel.Teixeira.de.Sousa.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17317546]精通Visual C++图像编程.pdf[/url]rn[url=http://www.t00y.com/file/17317550]精通Windows.API-函数、接口、编程实例.pdf[/url]rn[url=http://www.t00y.com/file/17317524]C++程序调试实用手册.pdf[/url]rn[url=http://www.t00y.com/file/17317525]Direct3D游戏开发技术详解.尚晶晶.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17317526]DirectX实时渲染技术详解.(Real-time.Rendering.Tricks.and.Techniques.in.DirectX).(美)Kelly.Dempski.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17317527]MFC.Windows程序设计(第2版)修订版_CHS.pdf[/url]rn[url=http://www.t00y.com/file/17317528]Visual.C++6编程宝典.pdf[/url]rn[url=http://www.t00y.com/file/17317529]Visual.C++程序设计基础与项目实训.pdf[/url]rn[url=http://www.t00y.com/file/17317530]Visual.C++网络通信编程实用案例精选.pdf[/url]rn[url=http://www.t00y.com/file/17317531]Visual_C++2008程序设计完全自学教程.pdf[/url]rn[url=http://www.t00y.com/file/17317532]Windows游戏编程大师技巧(第二版).(Tricks.of.the.Windows.Game.Programming.Gurus).(美)André.LaMothe.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17317533]Windows黑客技术揭秘与攻防-C语言篇.pdf[/url]rn[url=http://www.t00y.com/file/17317534]《C++程序设计语言(特别版) 高清中文PDF版》(The C++ Programming Language (Special Edition))(美.斯特朗斯特鲁普)第1版第18次印刷.pdf[/url]rn[url=http://www.t00y.com/file/17317535]《Visual C++从初学到精通》文字版.pdf[/url]rn[url=http://www.t00y.com/file/17317536]从新手到高手.C++全方位学习.(范磊).影印版.pdf[/url]rn[url=http://www.t00y.com/file/17317537]把脉VC++.pdf[/url]rn[url=http://www.t00y.com/file/17317538]标准C++编程宝典.pdf[/url]rn[url=http://www.t00y.com/file/17317520]3D游戏.卷1.实时渲染与软件技术.(3D_Games_Real-Time_Rendering_and_Software_Technology.Volume_1).(英)Alan_Watt.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17317521]3D游戏.卷2.动画与高级实时渲染技术.(3D.Games.Animation.and.Advanced.Real-Time.Rendering,Vol.2).(英)Alan.Watt.扫描版.pdf.pdf[/url]rn[url=http://www.t00y.com/file/17317522]AI游戏引擎程序设计.AI.Game.Engine.Programming.(美)Brian.Schwab.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/17317523]C++ builder彻底研究.pdf[/url]rn[url=http://www.t00y.com/file/16621954]C++探秘68讲贯通C..(.Exploring.C.The.Programmer’s.Introduction.to.C++).里斯纳.扫描版.PDF[/url]rn[url=http://www.t00y.com/file/16621955]P2P网络技术原理与C++开发案例.pdf[/url]rn[url=http://www.t00y.com/file/16621956]Visual C++ 程序设计.pdf[/url]rn[url=http://www.t00y.com/file/16585545]算法设计技巧与分析.(沙特)阿苏外耶.清晰版.pdf[/url]rn[url=http://www.t00y.com/file/16585546]缓冲区溢出光速入门.pdf[/url]rn[url=http://www.t00y.com/file/16585547]编程之美.编程之美小组.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/16585548]编程黑马真言_王轶男.pdf[/url]rn[url=http://www.t00y.com/file/16585549]网络游戏服务器编程.(韩)全洪.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/16585550]逆向C++(中文版).pdf[/url]rn[url=http://www.t00y.com/file/16585551]高质量C++编程指南.pdf[/url]rn[url=http://www.t00y.com/file/16585552]高质量程序设计指南.C++ C语言(第三版).林锐.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/16585344]你必须知道的495个C语言问题人民邮电出版社.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/16585345]我的第一本C++书.陈良乔.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/16585346]提高C++性能的编程技术.pdf[/url]rn[url=http://www.t00y.com/file/16585347]数据结构(C语言版).严蔚敏_吴伟民.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/16585348]数据结构.c++语言描述.pdf[/url]rn[url=http://www.t00y.com/file/16585349]数据结构.孙凌,李丹主编人民邮电出版社2005.pdf[/url]rn[url=http://www.t00y.com/file/16585534]数据结构C++语言描述.应用标准摸板库STL第2版.pdf[/url]rn[url=http://www.t00y.com/file/16585536]数据结构与算法分析–C++描述(第3版)(美)Mark.Allen.Weiss.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/16585537]数据结构实验教程.张凤琴.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/16585538]数据结构算法——Visual.C++6.0程序集.侯识忠.清晰版.pdf[/url]rn[url=http://www.t00y.com/file/16585539]浮点计算-编程原理,.实现与应用,.刘纯根,.扫描版.pdf[/url]rn[url=http://www.t00y.com/file/16585541]深入浅出MFC 第二版.pdf[/url]rn[url=http://www.t00y.com/file/16585542]深入解析MFC.MFC.Internals.GEORGE.SHEPHERD,.SCOT.WINGO.chs.pdf[/url]rn[url=http://www.t00y.com/file/16585543]游戏编程中的人工智能技术.(AI.Techniques.for.Game.Programming).(美)Mat.Buckland.扫描版.pdf[/url]rnrn

嵌套类。优先队列。

10-25

这是我的程序,大家就帮我看看涂色部分这么回事。太感激了rnback.h文件rn#pragma oncern//01背包问题类rnclass backrnrnpublic:rn back(void);rn back(int size,double volumn,double* value,double* weight);rn ~back(void);rn double operator()(bool *include);//完成对背包问题的解决,返回背包所能容纳的最大值,include[i]表示第i种物品是否包含。rnprivate:rn back &operator=(const back&)rn back(const back&)rn //用优先队列式分支限界法时所用的结点类rn [color=#FF0000]struct nodern rn [color=#00FFFF]bool operator<(const node&);[/color] bool*include;rn double value,rn weight;rn int level;rn ;[/color] int size;rn double volumn,rn *value,rn *weight;rn rn;rnback.cpp文件rn#include "StdAfx.h"rn#include "back.h"rn#include rn[color=#FF0000]bool back::node::operator<(const node&n)rnrn return value>n.value;rn[/color]back::back(void)rnrn this->size=0;rn this->volumn=0.0;rn this->value=NULL;rn this->weight=NULL;rnrnback::back(int size,double volumn,double *value,double *weight)rnrn this->size=size;rn this->volumn=volumn;rn this->value=value;rn this->weight=weight;rnrnback::~back(void)rnrn if(NULL!=value)rn delete []value;rn if(NULL!=weight)rn delete[]weight;rnrndouble back::operator()(bool *include)rnrn std::priority_queue nodequeue;rn node root;rn root.weight=0.0;rn root.value=0.0;rn root.level=0;rn root.include=new bool[size];rn nodequeue.push(root);rn double maxvalue=0.0;rn while(!nodequeue.empty())rn rn node extendnode=nodequeue.top();rn if(size==extendnode.level)rn rn if(extendnode.value>maxvalue)rn rn maxvalue=extendnode.value;rn for(int i=0;i c:\users\administrator\desktop\backmain\backmain\back.h(16): 可能是“bool back::node::operator <(const back::node &)”rn1> 尝试匹配参数列表“(const back::node, const back::node)”时rn1> d:\学习\vs2010\vc\include\xfunctional(124): 编译类 模板 成员函数“bool std::less<_Ty>::operator ()(const _Ty &,const _Ty &) const”时rn1> withrn1> [rn1> _Ty=back::nodern1> ]rn1> d:\学习\vs2010\vc\include\queue(360): 参见对正在编译的类 模板 实例化“std::less<_Ty>”的引用rn1> withrn1> [rn1> _Ty=back::nodern1> ]rn1> c:\users\administrator\desktop\backmain\backmain\back.cpp(31): 参见对正在编译的类 模板 实例化“std::priority_queue<_Ty>”的引用rn1> withrn1> [rn1> _Ty=back::nodern1> ]rn1> 正在生成代码...rn1> 正在编译...rn1> backmain.cpprn1> 正在生成代码...rn1>rn1>生成失败。[/color]

转载】MeeGo资讯和开发的相关站点与资源汇总

01-23

转自:http://hotmeego.com/forum.php?mod=viewthread&tid=455&page=1&extra=#pid661rnrn--------------------------------------------------------------------------------rnrn[color=#FF0000]欢迎大家补充、上传MeeGo资源![/color]rnrn[color=#FF0000]欢迎转载到你的博客或者喜欢去论坛,支持MeeGo发展!rn来源:[url=http://www.hotmeego.com]热米狗中文MeeGo社区[/url]rn链接:[url=http://www.hotmeego.com]http://www.hotmeego.com[/url][/color]rnrn[color=#FF00FF]MeeGo平台,无处不在!rn横跨手机、上网本、笔记本、平板电脑、车载设备、联网电视、多媒体电话、机顶盒等所有移动设备平台。移动改变技术,技术改变世界![/color]rnrn--------------------------------------------------------------------------------rnrn[color=#0000FF]相关站点[/color]rnrnMeeGo资讯或开发相关站点:rn[url=http://meego.com]http://meego.com[/url]rn[url=http://www.hotmeego.com]http://www.hotmeego.com[/url]rn[url=http://www.allaboutmeego.com]http://www.allaboutmeego.com[/url]rn[url=http://meegozone.com]http://meegozone.com[/url]rn[url=http://www.meegocommunity.net/]http://www.meegocommunity.net/[/url]rn[url=http://meegonews.com/]http://meegonews.com/[/url]rnrnMeeGo社区论坛:rn[url=http://www.hotmeego.com/forum.php]http://www.hotmeego.com/forum.php[/url]rn[url=http://forum.meego.com]http://forum.meego.com[/url]rnrnQt社区论坛:rn[url=http://developer.qt.nokia.com/forums]http://developer.qt.nokia.com/forums[/url]rn[url=http://hotmeego.com/forum.php?mod=forumdisplay&fid=44]http://hotmeego.com/forum.php?mod=forumdisplay&fid=44[/url]rnrnrn--------------------------------------------------------------------------------rnrnrn[color=#0000FF]Qt开发[/color]rnrnQT SDK下载:rn(1)下载 Qt SDK for Windows*rn[url=http://qt.nokia.com/downloads/sdk-windows-cpp]http://qt.nokia.com/downloads/sdk-windows-cpp[/url]rn(2)下载 Qt SDK for Linux/X11 32-bit**rn[url=http://qt.nokia.com/downloads/sdk-linux-x11-32bit-cpp]http://qt.nokia.com/downloads/sdk-linux-x11-32bit-cpp[/url]rn(3)下载 Qt SDK for Linux/X11 64-bit**rn[url=http://qt.nokia.com/downloads/sdk-linux-x11-64bit-cpp]http://qt.nokia.com/downloads/sdk-linux-x11-64bit-cpp[/url]rn(4)下载 Qt SDK for Macrn[url=http://qt.nokia.com/downloads/sdk-mac-os-cpp]http://qt.nokia.com/downloads/sdk-mac-os-cpp[/url]rnrnQt Creator下载:rn(1)下载用于 Windows 的 Qt Creator 2.0.1 二进制软件包 (46MB)rn[url=http://qt.nokia.com/downloads/qt-creator-binary-for-windows]http://qt.nokia.com/downloads/qt-creator-binary-for-windows[/url]rn(2)下载用于 Mac 的 Qt Creator 2.0.1 二进制软件包 (82 MB)rn[url=http://qt.nokia.com/downloads/qt-creator-binary-for-mac]http://qt.nokia.com/downloads/qt-creator-binary-for-mac[/url]rn(3)下载用于 Linux/X11 32位 的 Qt Creator 2.0.1二进制软件包 (45 MB)rn[url=http://qt.nokia.com/downloads/qt-creator-binary-for-linux-x11-32-bit]http://qt.nokia.com/downloads/qt-creator-binary-for-linux-x11-32-bit[/url]rn(4)下载用于 Linux/X11 64位 的 Qt Creator 2.0.1二进制软件包 (55 MB)rn[url=http://qt.nokia.com/downloads/qt-creator-binary-for-linux-x11-64-bit]http://qt.nokia.com/downloads/qt-creator-binary-for-linux-x11-64-bit[/url]rnrnQt技术文档下载:rn高级Qt编程:rn[url=http://hotmeego.com/forum.php?mod=viewthread&tid=7&extra=page%3D1]http://hotmeego.com/forum.php?mod=viewthread&tid=7&extra=page%3D1[/url]rnQt对象模型:rn[url=http://hotmeego.com/forum.php?mod=viewthread&tid=224&extra=page%3D1]http://hotmeego.com/forum.php?mod=viewthread&tid=224&extra=page%3D1[/url]rnQt官方中文白皮书:rn[url=http://hotmeego.com/forum.php?mod=viewthread&tid=122&extra=page%3D1]http://hotmeego.com/forum.php?mod=viewthread&tid=122&extra=page%3D1[/url]rnQt参考手册:rn[url=http://hotmeego.com/forum.php?mod=viewthread&tid=225&extra=page%3D1]http://hotmeego.com/forum.php?mod=viewthread&tid=225&extra=page%3D1[/url]rnrnrn--------------------------------------------------------------------------------rnrnrn[color=#0000FF]MeeGo开发[/color]rnrnMeeGo开发相关资料下载专区:rn[url=http://www.hotmeego.com/forum.php?mod=forumdisplay&fid=65]http://www.hotmeego.com/forum.php?mod=forumdisplay&fid=65[/url]rn认识MeeGo - 对MeeGo的简略版中文介绍:rn[url=http://hotmeego.com/forum.php?mod=viewthread&tid=242&extra=page%3D1]http://hotmeego.com/forum.php?mod=viewthread&tid=242&extra=page%3D1[/url]rn【Linux基金会官方文档】MeeGo英文介绍:rn[url=http://hotmeego.com/forum.php?mod=viewthread&tid=427&extra=page%3D1]http://hotmeego.com/forum.php?mod=viewthread&tid=427&extra=page%3D1[/url]rnIntel官方文档《借力英特尔凌动和MeeGo,构建智能互联车载平台》:rn[url=http://hotmeego.com/forum.php?mod=viewthread&tid=198&extra=page%3D2]http://hotmeego.com/forum.php?mod=viewthread&tid=198&extra=page%3D2[/url]rnMeeGo开源实践白皮书(中文版):rn[url=http://hotmeego.com/forum.php?mod=viewthread&tid=197&extra=page%3D2]http://hotmeego.com/forum.php?mod=viewthread&tid=197&extra=page%3D2[/url]rnMeeGo开发进阶基础篇(1-3):rn[url=http://hotmeego.com/forum.php?mod=viewthread&tid=473&page=1&extra=#pid680]http://hotmeego.com/forum.php?mod=viewthread&tid=473&page=1&extra=#pid680[/url]rnWind River Platform for MeeGo:rn[url=http://hotmeego.com/forum.php?mod=viewthread&tid=241&extra=page%3D1]http://hotmeego.com/forum.php?mod=viewthread&tid=241&extra=page%3D1[/url]rn【Nokia官方文档】MeeGo Packages:rn[url=http://hotmeego.com/forum.php?mod=viewthread&tid=426&extra=page%3D1]http://hotmeego.com/forum.php?mod=viewthread&tid=426&extra=page%3D1[/url]rnrnrn--------------------------------------------------------------------------------rnrnrn[color=#0000FF]MeeGo下载[/color]rnrnMeeGo v1.1 for netbook 上网本系统下载rn[url=http://repo.meego.com/MeeGo/releases/1.1/netbook/images/meego-netbook-ia32/meego-netbook-ia32-1.1.img]http://repo.meego.com/MeeGo/releases/1.1/netbook/images/meego-netbook-ia32/meego-netbook-ia32-1.1.img[/url]rnMeeGo v1.1 for IVI 车载信息娱乐系统下载rn[url=http://repo.meego.com/MeeGo/releases/1.1/ivi/images/meego-ivi-ia32-noemgd/meego-ivi-ia32-noemgd-1.1.img]http://repo.meego.com/MeeGo/releases/1.1/ivi/images/meego-ivi-ia32-noemgd/meego-ivi-ia32-noemgd-1.1.img[/url]rnrnrn--------------------------------------------------------------------------------rnrnrn[color=#0000FF]MeeGo安装[/color]rnrn虚拟机下安装手机版MeeGo:rn[url=http://hotmeego.com/forum.php?mod=viewthread&tid=461&extra=page%3D1]http://hotmeego.com/forum.php?mod=viewthread&tid=461&extra=page%3D1[/url]rnWindows下VirtualBox安装MeeGo上网本系统教程:rn[url=http://www.hotmeego.com/forum.php?mod=viewthread&tid=56&extra=page%3D1]http://www.hotmeego.com/forum.php?mod=viewthread&tid=56&extra=page%3D1[/url]rnWindows下VMWare安装MeeGo上网本系统教程:rn[url=http://www.hotmeego.com/forum.php?mod=viewthread&tid=57&extra=page%3D1]http://www.hotmeego.com/forum.php?mod=viewthread&tid=57&extra=page%3D1[/url]rnXP下安装MeeGo双系统:rn[url=http://www.hotmeego.com/forum.php?mod=viewthread&tid=109&extra=page%3D1]http://www.hotmeego.com/forum.php?mod=viewthread&tid=109&extra=page%3D1[/url]rnWeTab上安装MeeGo:rn[url=http://www.hotmeego.com/forum.php?mod=viewthread&tid=407&extra=page%3D1]http://www.hotmeego.com/forum.php?mod=viewthread&tid=407&extra=page%3D1[/url]rn

嵌套类的一些问题

09-18

以下是我写的一个红黑树代码,为什么begin和nullpos两个方法“无法将函数定义与现有的声明匹配”?是作用域的问题吗?rnps:在vs中这两个方法中的Node和iterator都没有正确高亮rn[code=c]rn//顺序统计数(红黑树)rn#pragma warning(disable:4996)rn#includern#includern#includern#includernrnusing namespace std;rnconst int M = 1000000000 + 7;rnrntemplaternclass RBTreernrnpublic:rn RBTree() :root(&null) rn void insert(dataType); //插入元素rn void erase(dataType); //删除结点rn int OSRank(dataType); //返回某个元素的秩rn dataType OSSelect(int); //返回第i小的结点rn vector inorderWalk(); //中序遍历rn iterator nullpos(); //返回空地址rn iterator begin(); //返回首地址rnrnprivate:rn //红黑树结点rn struct Node rn dataType key;rn int color;rn int size;rn Node *p, *left, *right;rn Node() rn size = 0;rn color = RED;rn p = nullptr; left = nullptr; right = nullptr;rn rn Node(int c) :color(c) rn size = 0;rn p = nullptr; left = nullptr; right = nullptr;rn rn Node(Node* t) :p(t), left(t), right(t) rn size = 0;rn color = RED;rn rn Node(int c, Node* t) :color(c), p(t), left(t), right(t) rn size = 0;rn rn ;rn static Node null;rn static const int RED = 0;rn static const int BLACK = 1;rn Node* root;rn void erase(Node*);rn int OSRank(Node*);rn void __inorderWalk(Node*, vector&);rn Node* __OSSelect(Node*, int);rn Node* search(Node*, dataType);rn Node* max(Node*);rn Node* min(Node*);rn Node* next(Node*);rn Node* former(Node*);rn void transplant(Node*, Node*);rn void leftRotare(Node*);rn void rightRotare(Node*);rn void changeSize(Node*, int);rn void insertFixup(Node*);rn void eraseFixup(Node*);rnpublic:rn struct iterator rn public:rn iterator operator ++();rn iterator operator --();rn dataType operator *();rn iterator() :iter(&null) rn //friendrn friend bool operator ==(const iterator, const iterator);rn friend bool operator !=(const iterator, const iterator);rn private:rn iterator(Node* it) :iter(it) rn Node* iter;rn ;rn;rnrn//哨兵rntemplaterntypename RBTree::Node RBTree::null = typename RBTree::Node(RBTree::BLACK);rnrn//返回首地址rntemplaterntypename RBTree::iteratorrnRBTree::begin()rnrn Node* x = root;rn while (x->left != &null)rn x = x->left;rn return iterator(x);rnrnrnrnrn//返回空地址rntemplaterntypename RBTree::iterator rnRBTree::nullpos()rnrn return iterator(&null);rnrnrn//operator ++rntemplaterntypename RBTree::iterator rnRBTree::iterator::operator++()rnrn this->iter = next(this->iter);rn return this;rnrnrn//operator --rntemplaterntypename RBTree::iteratorrnRBTree::iterator::operator--()rnrn this->iter = former(this->iter);rn return this;rnrnrn//operator *rntemplaterndataType rnRBTree::iterator::operator*()rnrn Node *x = this->iter;rn return x->key;rnrnrntemplaternboolrnoperator == (typename const RBTree::iterator it1, typename const RBTree::iterator it2)rnrn if (it1.iter == it2.iter)return true;rn return false;rnrnrntemplaternboolrnoperator != (typename RBTree::iterator it1, typename RBTree::iterator it2)rnrn if (it1.iter != it2.iter)return true;rn return false;rnrnrnrn//非递归查询树中某个值rntemplaterntypename RBTree::Node*rnRBTree::search(Node*x, dataType k)rnrn while (x != &null&&k != x->key)rn rn if (k < x->key)rn x = x->left;rn else x = x->right;rn rn return x;rnrnrn//返回树中最大值rntemplaterntypename RBTree::Node*rnRBTree::max(Node*x)rnrn while (x->right != &null)rn x = x->right;rn return x;rnrnrn//返回树中最小值rntemplaterntypename RBTree::Node*rnRBTree::min(Node* x)rnrn while (x->left != &null)rn x = x->left;rn return x;rnrnrn//辅助中序遍历rntemplaternvoidrnRBTree::__inorderWalk(Node* x, vector&ans)rnrn rn if (x != &null)rn rn __inorderWalk(x->left, ans);rn ans.push_back(x->key);rn __inorderWalk(x->right, ans);rn rnrnrn//中序遍历rntemplaternvectorrnRBTree::inorderWalk()rnrn vectorans;rn Node* x = root;rn __inorderWalk(x, ans);rn return ans;rnrnrn//返回某结点的后继rntemplaterntypename RBTree::Node*rnRBTree::next(Node*x)rnrn if (x->right != &null)rn return min(x->right);rn Node*y = x->p;rn while (y != &null&&x == y->right)rn rn x = y;rn y = x->p;rn rn return y;rnrnrn//返回某结点的前继rntemplaterntypename RBTree::Node*rnRBTree::former(Node*x)rnrn if (x->left != &null)rn return max(x->left);rn Node*y = x->p;rn while (y != &null&&x == y->left)rn rn x = y;rn y = x->p;rn rn return y;rnrnrn//返回某个结点的秩rntemplaternintrnRBTree::OSRank(Node*x)rnrn int r = x->left->size + 1;rn while (x != &null)rn rn if (x == x->p->right)rn r = r + x->p->left->size + 1;rn x = x->p;rn rn return r;rnrnrn//返回某个元素的秩rntemplaternintrnRBTree::OSRank(dataType k)rnrn Node*x = search(root, k);rn if (x == &null)return -1;rn return OSRank(x);rnrnrn//辅助返回第i小的结点rntemplaterntypename RBTree::Node*rnRBTree::__OSSelect(Node* x, int i)rnrn if (x->left == nullptr)return nullptr;rn int r = x->left->size + 1;rn if (i == r)rn return x;rn else if (i < r)rn return __OSSelect(x->left, i);rn else return __OSSelect(x->right, i - r);rnrnrn//返回第i小的结点rntemplaterndataTypernRBTree::OSSelect(int i)rnrn Node* temp = __OSSelect(root, i);rn if (temp == nullptr) return -1;rn return temp->key;rnrnrn//移动子树rntemplaternvoidrnRBTree::transplant(Node* u, Node* v)rnrn if (u->p == &null)rn root = v;rn else if (u == u->p->left)rn u->p->left = v;rn else u->p->right = v;rn v->p = u->p;rnrnrn//左旋rntemplaternvoidrnRBTree::leftRotare(Node *x)rnrn Node*y = x->right;rn x->right = y->left;rn if (y->left != &null)rn y->left->p = x;rn y->p = x->p;rn if (x->p == &null)rn root = y;rn else if (x == x->p->left)rn x->p->left = y;rn else x->p->right = y;rn y->left = x;rn x->p = y;rn y->size = x->size;rn x->size = x->left->size + x->right->size + 1;rnrnrn//右旋rntemplaternvoidrnRBTree::rightRotare(Node *x)rnrn Node*y = x->left;rn x->left = y->right;rn if (y->right != &null)rn y->right->p = x;rn y->p = x->p;rn if (x->p == &null)rn root = y;rn else if (x == x->p->left)rn x->p->left = y;rn else x->p->right = y;rn y->right = x;rn x->p = y;rn y->size = x->size;rn x->size = x->left->size + x->right->size + 1;rnrnrn//从某一结点沿简单路径遍历到根并改变沿路结点的sizerntemplaternvoidrnRBTree::changeSize(Node* x, int c)rnrnrn while (x != &null)rn rn x->size += c;rn x = x->p;rn rnrnrn//重新着色并旋转(插入)rntemplaternvoidrnRBTree::insertFixup(Node*z)rnrn while (z->p->color == RED)rn rn if (z->p == z->p->p->left)rn rn Node* y = z->p->p->right;rn if (y->color == RED)rn rn z->p->color = BLACK;rn y->color = BLACK;rn z->p->p->color = RED;rn z = z->p->p;rn rn else rn if (z == z->p->right)rn rn z = z->p;rn leftRotare(z);rn rn z->p->color = BLACK;rn z->p->p->color = RED;rn rightRotare(z->p->p);rn rn rn elsern rn Node* y = z->p->p->left;rn if (y->color == RED)rn rn z->p->color = BLACK;rn y->color = BLACK;rn z->p->p->color = RED;rn z = z->p->p;rn rn else rn if (z == z->p->left)rn rn z = z->p;rn rightRotare(z);rn rn z->p->color = BLACK;rn z->p->p->color = RED;rn leftRotare(z->p->p);rn rn rn rn root->color = BLACK;rnrnrn//插入元素rntemplaternvoidrnRBTree::insert(dataType temp)rnrn Node *y = &null;rn Node *x = root;rn Node *z = new Node(&null);rn z->key = temp;rn while (x != &null)rn rn y = x;rn if (z->key < x->key)rn x = x->left;rn else x = x->right;rn rn z->p = y;rn if (y == &null)rn root = z;rn else if (z->key < y->key)rn y->left = z;rn else y->right = z;rn z->color = RED;rn changeSize(z, 1);rn insertFixup(z);rnrnrn//重新着色并旋转(删除)rntemplaternvoidrnRBTree::eraseFixup(Node*x)rnrn Node* w(&null);rn w->p = &null;rn w->left = &null;rn w->right = &null;rn while (x != root&&x->color == BLACK)rn rn if (x == x->p->left)rn rn w = x->p->right;rn if (w->color == RED)rn rn w->color = BLACK;rn x->p->color = RED;rn leftRotare(x->p);rn w = x->p->right;rn rn if (w->left->color == BLACK&&w->right->color == BLACK)rn rn w->color = RED;rn x = x->p;rn rn else rn if (w->right->color == BLACK)rn rn w->left->color = BLACK;rn w->color = RED;rn rightRotare(w);rn w = x->p->right;rn rn w->color = x->p->color;rn x->p->color = BLACK;rn w->right->color = BLACK;rn leftRotare(x->p);rn x = root;rn rn rn else rn w = x->p->left;rn if (w->color == RED)rn rn w->color = BLACK;rn x->p->color = RED;rn rightRotare(x->p);rn w = x->p->left;rn rn if (w->right->color == BLACK&&w->left->color == BLACK)rn rn w->color = RED;rn x = x->p;rn rn else rn if (w->left->color == BLACK)rn rn w->right->color = BLACK;rn w->color = RED;rn leftRotare(w);rn w = x->p->left;rn rn w->color = x->p->color;rn x->p->color = BLACK;rn w->left->color = BLACK;rn rightRotare(x->p);rn x = root;rn rn rn rnrnrn//删除结点(按结点)rntemplaternvoidrnRBTree::erase(Node *z)rnrn Node*y = z;rn Node*x = &null;rn int yoc = y->color;rnrn if (z->left == &null)rn rn x = z->right;rn changeSize(z, -1);rn transplant(z, z->right);rn rn else if (z->right == &null)rn rn x = z->left;rn changeSize(z, -1);rn transplant(z, z->left);rn rn else rn y = min(z->right);rn changeSize(y, -1);rn x = y->right;rn if (y->p == z)rn x->p = y;rn else rn transplant(y, y->right);rn y->right = z->right;rn y->right->p = y;rn rn transplant(z, y);rn y->left = z->left;rn y->left->p = y;rn y->color = z->color;rn rn if (yoc == BLACK)rn eraseFixup(x);rn delete z;rnrnrn//删除结点(按key)rntemplaternvoidrnRBTree::erase(dataType k)rnrn Node *z = search(root, k);rn if (z == &null)return;rn erase(z);rnrnrn[/code]

转载

12-23

堆(heap)和栈(stack)是C/C++编程不可避免会碰到的两个基本概念。首先,这两个概念 rnrn都可以在讲数据结构的书中找到,他们都是基本的数据结构,虽然栈更为简单一些。 rnrn在具体的C/C++编程框架中,这两个概念并不是并行的。对底层机器代码的研究可以揭示 rnrn,栈是机器系统提供的数据结构,而堆则是C/C++函数库提供的。 rnrn具体地说,现代计算机(串行执行机制),都直接在代码底层支持栈的数据结构。这体现 rnrn在,有专门的寄存器指向栈所在的地址,有专门的机器指令完成数据入栈出栈的操作。 rnrn这种机制的特点是效率高,支持的数据有限,一般是整数,指针,浮点数等系统直接支 rnrn持的数据类型,并不直接支持其他的数据结构。因为栈的这种特点,对栈的使用在程序 rnrn中是非常频繁的。对子程序的调用就是直接利用栈完成的。机器的call指令里隐含了把 rnrn返回地址推入栈,然后跳转至子程序地址的操作,而子程序中的ret指令则隐含从堆栈中 rnrn弹出返回地址并跳转之的操作。C/C++中的自动变量是直接利用栈的例子,这也就是为什 rnrn么当函数返回时,该函数的自动变量自动失效的原因(因为 颜换指戳说饔们暗 状态)。 rnrn rnrn和栈不同,堆的数据结构并不是由系统(无论是机器系统还是操作系统)支持的,而是由 rnrn函数库提供的。基本的malloc/realloc/free函数维护了一套内部的堆数据结构。当程序 rnrn使用这些函数去获得新的内存空间时,这套函数首先试图从内部堆中寻找可用的内存空 rnrn间,如果没有可以使用的内存空间,则试图利用系统调用来动态增加程序数据段的内存 rnrn大小,新分配得到的空间首先被组织进内部堆中去,然后再以适当的形式返回给调用者 rnrn。当程序释放分配的内存空间时,这片内存空间被返回内部堆结构中,可能会被适当的 rnrn处理(比如和其他空闲空间合并成更大的空闲空间),以更适合下一次内存分配申请。这 rnrn套复杂的分配机制实际上相当于一个内存分配的缓冲池(Cache),使用这套机制有如下若 rnrn干原因: rnrn1. 系统调用可能不支持任意大小的内存分配。有些系统的系统调用只支持固定大小及其 rnrn倍数的内存请求(按页分配);这样的话对于大量的小内存分类来说会造成浪费。 rnrn2. 系统调用申请内存可能是代价昂贵的。系统调用可能涉及用户态和核心态的转换。 rnrn3. 没有管理的内存分配在大量复杂内存的分配释放操作下很容易造成内存碎片。 rnrn堆和栈的对比 rnrn从以上知识可知,栈是系统提供的功能,特点是快速高效,缺点是有限制,数据不灵活 rnrn;而栈是函数库提供的功能,特点是灵活方便,数据适应面广泛,但是效率有一定降低 rnrn。栈是系统数据结构,对于进程/线程是唯一的;堆是函数库内部数据结构,不一定唯一 rnrn。不同堆分配的内存无法互相操作。栈空间分静态分配和动态分配两种。静态分配是编 rnrn译器完成的,比如自动变量(auto)的分配。动态分配由alloca函数完成。栈的动态分配 rnrn无需释放(是自动的),也就没有释放函数。为可移植的程序起见,栈的动态分配操作是 rnrn不被鼓励的!堆空间的分配总是动态的,虽然程序结束时所有的数据空间都会被释放回 rnrn系统,但是精确的申请内存/释放内存匹配是良好程序的基本要素。 rnrn

转载……

04-10

rn--------------------------------------------------------------------------------rn rn我是怎样进入chinalinux站点的 rn转载:quack(有雪的日子多好) rn rn我是怎样进入chinalinux站点的rnrnrnby Big Rabbit rnrn  大家都知道,中国有个最大的操作系统软件生产厂家,那就是 chinalinux。很多人都想试图进入其主站点 http://www.chinalinux.com, rnrn因为那将是对自己的一个挑战。终於有一天成功的进入了其主站,在此写出我的过程,以及对常见web服务的安全模型的理解,对此的一些总结 rnrn等,希望大家能够从中得到自己的理解。 rnrn首先,那当然得介绍介绍这chinalinux站点的一些情况吧。http://www.chinalinux.com是使用自己开发的一个由linux升级得来的中文操作系 rnrn统,而web服务也是采用自己的产品ccs。这ccs安装、使用非常方便,也很容易配置管理,所以很多管理员都喜欢使用这个产品。 rnrn  为了要能进入这样的站点,那当然就得熟悉ccs这个web服务系统了。根据这个系统的一些基本服务特性,以及一些权限配置,简单总结後 rnrn有三点。 rnrn一、ccs系统提供外界可以访问系统一部分目录文件的服务 rn二、ccs提供虚拟目录配置,每个虚拟目录可以对应一定的权限 rn三、ccs系统文件类型配置,可以配置不同的文件类型,提供直接在服务端运行和返回客户端运行两种方式 rnrn  通过上面的了解,我总结出了ccs的一个安全模型,那就是ccs是一个外挂式的有权限限制的web系统。怎么来理解这“外挂”呢?因为大家 rnrn熟悉操作系统的都知道,操作系统本身对一些对象有权限控制,而这ccs系统的权限控制不是依靠操作系统本身的这些功能,而是依靠自己的一 rnrn些检测。最重要的一点,操作系统对对象权限的分配都附在对象本身身上,而ccs的是把所有对象的权限分配记在ccs系统上面。   rnrn  这点有什么区别呢,操作系统处理的时候每个真实对象有一个档案,而每个对象可能有些别名,这样访问这些别名的时候我们不用关心它 rnrn到底是别名还是真名,只要最终对应到那个唯一的档案就能正确的得到权限分配。打个形象点的比喻,月底发工资,操作系统把每个人建立了 rnrn一个唯一的档案,这些档案里面记录有这个人的工资,而这个人可能叫小张也叫张三,那么发工资的时候不用管他叫小张还是张三,最终是找 rnrn到了他的工资表也就正确的发放了他的工资。而对於ccs系统来说,因为它没有这样一张工资表,它就是根据人名来确定工资,所以它就必须考 rnrn虑每个人所有的名字才能正确的发放工资。所以根据这个基本的特点,总结出了安全编写ccs系统应该注意的四点: rnrn1、 ccs系统提供的服务应该做chroot限制 rn2、 ccs系统应该能识别一个真实目录对应的所有目录名 rn3、 ccs系统应该能识别一个真实文件对应的所有文件名 rn4、 ccs系统的调用接口应该完全按照接口意思实现 rnrn  这几点,每点都可以写出一大篇文章了,因为这篇文章不是写这些,所以也就只写这点提纲式的东西吧。不光是CCS系统需要注意上面4点 rnrn,其它的WEB服务器差不多同样需要考虑这样4点。 rnrn  根据这些认识以及对一些原来公布漏洞的理解,很快就发现了大量的漏洞,在此总结出来原因:编写CCS系统的人员没有建立一个安全模型 rnrn,对安全没有深刻的认识,所以在系统实现上就没有系统的、全面的对权限做检测,只是编写人员想到一条做一条,因为没有明确提出这些安 rnrn全上的要求,这些检测也往往是很容易逃避的,所以造成这么多的漏洞。 rnrn  说了这么多,还没有正式提到漏洞,那就马上来了。根据上面的第1条,显然CCS系统应该检测用户请求中的“/../”,这点不知道现在还 rnrn有多少WEB有这样低级的严重的不可饶恕的错误。CCS系统低版本就有这样的漏洞,但现在显然没有了,它会先检测这样的请求,做出正确的处 rnrn理。但是因为没有这样明确的安全模型,所以错误又出来了。为了对多语言以及一些传输设备的支持,CCS系统支持一种unicode的传输编码格 rnrn式,而经过这样的解码後,请求的字符已经发生变化,显然根据上面安全模型的提出的“外挂式”特徵,这权限检测不能依靠解码前的检测, rnrn需要再次检测,而CCS根本就没意思到这些,所以我们可以轻易突破所有这些限制了。 rnrn  於是试了其主站http://www.chinalinux.com果然有此漏洞,不过没法利用干什么事,因为其主站虚拟目录对应的一个可执行/csapi目录是 rnrn作了chroot限制,也就是通过这个虚拟目录,往上级目录返回最终也到不了系统的根“/”,当然也就不能执行系统/bin/目录里面的东西了, rnrn也不能得到/etc/目录里面的密码文件,而那些缺省安装没有做chroot限制的可执行虚拟目录却被删除。好不容易找到一个漏洞却不能利用。 rnrn  不过後来偶然一天访问到其一个分站点http://support.chinalinux.com,於是偷偷的试了一下其缺省安装的可执行虚拟目录/chinaadc, rnrn就是在浏览器里面输入了http://support.chinalinux.com/chinaadc/,乖乖,返回的是“HTTP 错误 403 - 禁止访问”而不是此目录不存在的 rnrn“HTTP 404 - 无法找到文件”错误。大家都知道这个目录是没有做chroot限制的,可以成功的返回到系统的根“/”,再进入系统目录“/bin/ rnrn”,执行下面的shell程序“sh”了。当然也就用此sh查看了一些web目录结构。 rnrn  http://support.chinalinux.com/chinaadc/..%c0%af../..%c0%af../bin/sh.elf?ls+/http rnrnrn  就可以看到web目录所在东西了,很高兴的看到了此目录里面有一些脚本“.sh”文件。 rnrn  对於这些脚本文件,CCS系统又有漏洞,那就是上面第4条的一个漏洞。在作接口的时候,接口实现程序一定得完全按照接口意思实现,这 rnrn点CCS系统出了更是无数的漏洞。而因为CCS是相对操作系统後出来的了,它在调用操作系统调用的时候,当然就不能要求操作系统来满足它的 rnrn要求了,这些调用本身处於比CCS系统低的层次,也不应该去满足CCS的特殊要求,所以CCS必须明白一些操作系统调用有什么特殊的地方。这在 rnrnchinalinux系统实现加载程序的调用上,为了支持长文件名、文件名里面的空格等,可以在加载的文件名前後加上“””号,chinalinux加载 rnrn程序就是用“””来匹配到底加载的是哪个文件。而又一点,如果检测到是加载“.sh”的脚本文件,就自动的调用shell程序“sh”去解释, rnrn而这调用也饶过了chroot使得不能访问“/”以及系统目录的限制。在调用“sh”的时候,操作系统会把这个脚本文件以及脚本文件的参数统一 rnrn作为参数加载。大家都知道shell程序“sh”本身支持命令连接符、管道等,所以我们可以在参数里面加上命令连接符和我们要执行的命令。所 rnrn以CCS在加载程序的时候就必须应该明白操作系统chinalinux加载程序的这些特性,从而实现相应的检测。 rnrn  对於上面看到的web目录结构,以及里面的那些“.sh”脚本文件,我大胆的猜测其主站http://www.chinalinux.com可能也存在。虽然CCS rnrn系统不准直接加载“.sh”的脚本文件,但是我们可以通过使用“””的办法使得实际加载的不是CCS系统需要的“.elf”格式文件。 rnrn  http://www.chinalinux.com/csapi/..%c0%afhttp/china.sh”+.elf?”+&+ls+/bin rnrn  成功的突破了chroot对根“/”的限制,查看到了系统目录,也可以完全控制主站了。当然这些不是目的,我们也不希望这样的站点有任何 rnrn的被修改,後来其站点终於也打上了相应的补丁。 rnrn  後来有人用unicode漏洞破了chinalinux一个废弃不用的分站点,改了一个页面并且大肆宣扬,这完全没有必要。我们需要的是通过这些方 rnrn法得到我们考虑问题的思路、方法等,而不是去破坏。 rnrn最後再次总结: rnrn一、编写WEB服务安全模型建立的必要性 rn二、站点安全配置往往因为一点小小的错误,使得全线崩溃 rnrn希望我们的程序员在编写安全程序的时候,也要多考虑考虑我们怎么能够更好的编写安全的程序。 rnrnrnFrom Hackland taiwan rn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试