set源代码



G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_set.h
完整列表

/*

*

* Copyright (c) 1994

* Hewlett-Packard Company

*

* Permission to use, copy, modify, distributeand sell this software

* and its documentation for any purpose ishereby granted without fee,

* provided that the above copyright noticeappear in all copies and

* that both that copyright notice and thispermission notice appear

* in supporting documentation. 
Hewlett-Packard Company makes no

* representations about the suitability ofthis software for any

* purpose. It
is provided "as is" without express or implied warranty.

*

*

* Copyright (c) 1996,1997

* Silicon Graphics Computer Systems, Inc.

*

* Permission to use, copy, modify, distributeand sell this software

* and its documentation for any purpose ishereby granted without fee,

* provided that the above copyright noticeappear in all copies and

* that both that copyright notice and thispermission notice appear

* in supporting documentation. 
Silicon Graphics makes no

* representations about the suitability ofthis software for any

* purpose. It
is provided "as is" without express or implied warranty.

*/

/* NOTE: This isan internal header file, included by other STL headers.

*  
Youshould not attempt to use it directly.

*/

#ifndef__SGI_STL_INTERNAL_SET_H

#define__SGI_STL_INTERNAL_SET_H

__STL_BEGIN_NAMESPACE

#if defined(__sgi)&& !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)

#pragma set woff1174

#endif

#ifndef__STL_LIMITED_DEFAULT_TEMPLATES

template <classKey,
class Compare
= less<Key>, class
Alloc = alloc>

#else

template <classKey, class Compare, class Alloc = alloc>

#endif

class
set {

public:

// typedefs:

typedef Key key_type;

typedef Key value_type;

//
注意,以下 key_compare

value_compare
使用相同的比較函式

typedef Compare key_compare;

typedef Compare value_compare;

private:

/*
注意,identity
定義於 <stl_function.h>,參見第7章,其定義為:

template <class T>

struct identity: public unary_function<T, T> {

const T& operator()(const T& x)const { return x; }

};

*/

//
以下,rb_tree<Key,Value, KeyOfValue, Compare,
Alloc>

typedef rb_tree<key_type, value_type,

identity<value_type>, key_compare, Alloc>
rep_type;

rep_type t
//
採用紅黑樹(RB-tree)來表現
set

public:

typedef typename rep_type::const_pointer
pointer;

typedef typename rep_type::const_pointer
const_pointer;

typedef typename rep_type::const_reference
reference;

typedef typename rep_type::const_reference
const_reference;

typedef typename rep_type::const_iterator
iterator;

//
注意上一行,iterator
定義為 RB-tree

const_iterator,這表示
set

// 迭代器無法執行寫入動作。這是因為
set
的元素有一定次序安排,

// 不允許使用者在任意處做寫入動作。

typedef typename rep_type::const_iterator
const_iterator;

typedef typename rep_type::const_reverse_iteratorreverse_iterator;

typedef typenamerep_type::const_reverse_iterator
const_reverse_iterator;

typedef typename rep_type::size_type
size_type;

typedef typename rep_type::difference_type
difference_type;

//allocation/deallocation

//
注意, set
一定使用
insert_unique()
而不使用 insert_equal()。

// multiset 才使用
insert_equal()。

set() :
t(Compare()) {}

explicit set(const Compare& comp) : t(comp) {}

#ifdef__STL_MEMBER_TEMPLATES

template <class InputIterator>

set(InputIterator first, InputIterator last)

: t(Compare()) { t.insert_unique(first, last); }

template <class InputIterator>

set(InputIterator first, InputIterator last, const Compare& comp)

: t(comp) { t.insert_unique(first, last); }

#else

set(const value_type* first, const value_type* last)

: t(Compare()) { t.insert_unique(first, last); }

set(const value_type* first, const value_type* last, const Compare&comp)

: t(comp) { t.insert_unique(first, last); }

set(const_iterator first, const_iterator last)

: t(Compare()) { t.insert_unique(first, last); }

set(const_iterator first, const_iterator last, const Compare& comp)

: t(comp) { t.insert_unique(first, last); }

#endif /*__STL_MEMBER_TEMPLATES */

set(const set<Key, Compare, Alloc>& x) : t(x.t) {}

set<Key,
Compare,Alloc>& operator=(const set<Key,Compare, Alloc>& x) {

t = x.t;

return *this;

}

// 以下所有的
set操作行為,RB-tree
都已提供,所以
set
只要轉呼叫即可。

// accessors:

key_compare key_comp() const { return
t.key_comp(); }

//
以下注意,set
的value_comp()
事實上為RB-tree
的key_comp()。

value_compare value_comp() const { return
t.key_comp(); }

iterator begin() const { return
t.begin(); }

iterator end() const { return
t.end(); }

reverse_iterator rbegin() const { return
t.rbegin(); }

reverse_iterator rend() const { return
t.rend(); }

bool empty() const { return
t.empty(); }

size_type size() const { return
t.size(); }

size_type max_size() const { return
t.max_size(); }

void swap(set<Key, Compare, Alloc>& x) {
t.swap(x.t); }

// insert/erase

typedef pair<iterator, bool> pair_iterator_bool;

pair<iterator,bool> insert(const value_type& x) {

pair<typename rep_type::iterator,bool> p =
t.insert_unique(x);

return pair<iterator, bool>(p.first,p.second);

}

iterator insert(iterator position, const value_type& x) {

typedef typename rep_type::iteratorrep_iterator;

return t.insert_unique((rep_iterator&)position, x);

}

#ifdef__STL_MEMBER_TEMPLATES

template <class InputIterator>

void insert(InputIterator first, InputIterator last) {

t.insert_unique(first, last);

}

#else

void insert(const_iterator first, const_iterator last) {

t.insert_unique(first, last);

}

void insert(const value_type* first, const value_type* last) {

t.insert_unique(first, last);

}

#endif /*__STL_MEMBER_TEMPLATES */

void erase(iterator position) {

typedef typename rep_type::iterator rep_iterator;

t.erase((rep_iterator&)position);

}

size_type erase(const key_type& x) {

return t.erase(x);

}

void erase(iterator first, iterator last) {

typedef typename rep_type::iteratorrep_iterator;

t.erase((rep_iterator&)first, (rep_iterator&)last);

}

void clear() {
t.clear(); }

// set operations:

iterator find(const key_type& x) const { return
t.find(x); }

size_type count(const key_type& x) const { return
t.count(x); }

iterator lower_bound(const key_type& x) const {

return t.lower_bound(x);

}

iterator upper_bound(const key_type& x) const {

return t.upper_bound(x);

}

pair<iterator,iterator> equal_range(const key_type& x) const {

return t.equal_range(x);

}

friend bool operator== __STL_NULL_TMPL_ARGS (const set&, const set&);

friend bool operator< __STL_NULL_TMPL_ARGS (const set&, const set&);

};

template <classKey, class Compare, class Alloc>

inline bool
operator==(const set<Key, Compare, Alloc>& x,

const set<Key, Compare,Alloc>& y) {

return x.t == y.t;

}

template <classKey, class Compare, class Alloc>

inline bool
operator<(const set<Key, Compare, Alloc>& x,

const set<Key,Compare, Alloc>& y) {

return x.t < y.t;

}

#ifdef__STL_FUNCTION_TMPL_PARTIAL_ORDER

template <classKey, class Compare, class Alloc>

inline void
swap(set<Key, Compare, Alloc>& x,

set<Key, Compare,Alloc>& y) {

x.swap(y);

}

#endif /*__STL_FUNCTION_TMPL_PARTIAL_ORDER */

#if defined(__sgi)&& !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)

#pragma reset woff1174

#endif

__STL_END_NAMESPACE

#endif /*__SGI_STL_INTERNAL_SET_H */

// LocalVariables:

// mode:C++

// End:

set源代码,布布扣,bubuko.com

时间: 2024-11-05 17:32:50

set源代码的相关文章

如何阅读源代码(7)

第七章: 编码规范和约定 +++++++++++++++++++ 137.了解了给定代码库所遵循的文件组织方式后, 就能更有效率地浏览它的源代码. 138.阅读代码时, 首先要确保您的编辑器或优美打印程序的tab设置, 与代码遵循的风格规范一致. 139.可以使用代码块的缩进, 快速地掌握代码的总体结构. 140.对编排不一致的代码, 应该立即给予足够的警惕. 141.分析代码时, 对标记为XXX, FIXME和TODO的代码序列要格外注意: 错误可能就潜伏在其中. 142.常量使用大写字母命名

jQuery源代码学习之六——jQuery数据缓存Data

一.jQuery数据缓存基本原理 jQuery数据缓存就两个全局Data对象,data_user以及data_priv; 这两个对象分别用于缓存用户自定义数据和内部数据: 以data_user为例,所有用户自定义数据都被保存在这个对象的cache属性下,cache在此姑且称之为自定义数据缓存: 自定义数据缓存和DOM元素/javascript对象通过id建立关联,id的查找通过DOM元素/javascript元素下挂载的expando属性获得 话不多说,直接上代码.相关思路在代码注释中都有讲解

Java源代码学习 -- java.lang.String

java.lang.String是使用频率非常高的类.要想更好的使用java.lang.String类,了解其源代码实现是非常有必要的.由java.lang.String,自然联想到java.lang.StringBuffer和java.lang.StringBuilder,下篇文章再来研究java.lang.StringBuffer和java.lang.StringBuilder. 重要属性 java.lang.String对象中字符串主要是以字符数组的形式存储.当调用对象方法获取字符串长度时

修改源代码时不需要重启tomcat服务器

我们在写JSP + Servlet 的时修改了Java代码就要重新启动服务器.十分麻烦. 为了解决这个问题我们可以将服务器改成debug 模式.就是按调试状态这样修改Java代码就不用再重新启动服务器了.只需刷新浏览器即可.可以看下面的图 当然也可以将Tomcat设置为 热启动,修改源代码时也不需要重启tomcat服务器.具体的执行方法我就不写了.大家可以去搜索下热启动的方法. 我用的是Tomcat服务器我就写了Tomcate 的解决方法.以上不足请多指教.

钢铁少女 无限钻石安卓版下载 和 源代码部署成功

本文中所有资料.资源文件仅供技术学习.研究之用,请必须在24小时内删除所下载文件,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担.本文中的网游信息.网游源代码资源均来自互联网,非本站开发.如有侵犯您的合法权益请来信告之,我们会在三个工作日内予以清除.<钢铁少女>(战舰少女2.0)的源代码部署成功,欢迎试玩. 无限钻石安卓版下载 http://pan.baidu.com/s/1i4hfG9J客户端源代码 http://pan.baidu.com/s/1o74CgjS服务器

如何切入 Linux 内核源代码

Makefile不是Make Love 从前在学校,混了四年,没有学到任何东西,每天就是逃课,上网,玩游戏,睡觉.毕业的时候,人家跟我说Makefile我完全不知,但是一说Make Love我就来劲了,现在想来依然觉得丢人. 毫不夸张地说,Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件.基本上,Linux内核中每一个目录下边都会有一个 Kconfig文件和一个Makefile文件.对于一个希望能够在Linux内核的汪洋代码里看到一丝曙光的人来说,将它们放在怎么重要的地位都

iOS源代码管理git

01. GIT简介 git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的 git的起源 作者是Linux之父:Linus Benedict Torvalds 当初开发git仅仅是为了辅助Linux内核的开发(管理源代码) git的现状 在国外已经非常普及,国内并未普及(在慢慢普及) 越来越多的开源项目已经转移到git 02. GIT在本地的操作 01. GIT命令行帮助 $ git help 查看git所有命令的帮助 $ git help 子命

iOS源代码管理svn

01. SVN介绍 SVN 是集中式源代码管理工具 概念: 1> Repository   代码仓库,保存代码的仓库 2> Server       服务器,保存所有版本的代码仓库 3> Client       客户端,只保存当前用户的代码仓库 4> 用户名&密码   访问代码仓库需要使用自己的"用户名和密码",从而可以区分出不同的人对代码做的修改 操作: 1> checkout     将服务器上最新的代码仓库下载到本地,"只需要做一

Android源代码的下载

1.准备工具: 安装git和curl 在终端窗口敲下面的命令: sudo apt-get install git-core curl 安装repo脚本 curl "http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo"> ~/bin/repo 给repo可执行权限 chmod a+x ~/bin/repo PATH=~/bin:&PATH 2.下载android源代码 (这里默认下载gingerbread An

基于git的源代码管理模型——git flow

说明: 本文以nvie的“a successful git branching model”为蓝本,结合我个人理解写成.如有谬误,还请各位指出.多谢! Note: This article is highly based on nvie's a successful git branching model. Thanks nvie. Git Flow 是什么 Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践.Git Flow是一套使用Git