STL迭代器成员函数的要求


以一
以一 2023-12-31 03:35:55 51774 赞同 0 反对 0
分类: 资源
STL 定义了一套需要迭代器类型支持并且依赖迭代器类别的成员函数。如果把它们编成组,显然很有用。第一组需要全部迭代器和一些所有迭代器类都需要的重要函数:默认构造函数、拷贝构造函数以及赋值运算符。根据经验,如果为迭代器类定义了其中任意一个函数,就需要定义一个显式的析构函数。该组中类型迭代器的全套函数是:

STL迭代器成员函数的要求

STL 定义了一套需要迭代器类型支持并且依赖迭代器类别的成员函数。如果把它们编成组,显然很有用。第一组需要全部迭代器和一些所有迭代器类都需要的重要函数:默认构造函数、拷贝构造函数以及赋值运算符。根据经验,如果为迭代器类定义了其中任意一个函数,就需要定义一个显式的析构函数。该组中类型迭代器的全套函数是:

  1. Iterator(); // Default constructor
  2. Iterator (const Iterator& y) ; // Copy constructor
  3. ~Iterator (); // Destructor
  4. Iterator& operator= (const Iterator& y) ;// Assignment operator

对于随机访问迭代器类,STL 需要一整套的关系运算符。事实上,可以通过使用 utility 标准库头文件中的函数模板来完成这些定义:

  1. bool operator==(const Iterator& y) const;
  2. bool operator<(const Iterator& y) const;

下面假定已经直接 #include 头文件 utility,并且直接使用命名空间 std::relops:

  1. #include <utility>
  2. using namespace std::rel_ops;

如果为类定义了 operator=() 和 operator<(),然后 std 中声明的命名空间 rel_ops 在必要时,就可以包含我们为 !=、>、>= 和 <= 生成的运算符函数的函数模板。因此直接用 using 激活 std::rel_ops,就可以显式保存这 4 个运算符函数。如果定义一个运算符函数,但是它已经被命名空间 std::rd_ops 模板生成,那么我们的实现的优先级高于模板生成的实现。函数 operator() 比较特别,叫作顺序关系,它对搜索和比较算法很重要。

函数 operator==() 可以检验两个容器对象的内容是否相同。这是一个有趣的方面,对于任意一对操作数 x 和 y,表达式 (x<y || y<x || x==y) 总为真,因为这个表达式的三部分中总有一部分为真。

事实上,不需要那样做,如果 x==y 为真,那么 x<y 和 y<x 都不可能为真。唯一可以确定的是两个相等元素没有什么不同。然而,如果 x!=y,就无法断定中的哪个为真。当表达式 (!(x<y)) &&(!(y<x)) 为真时,就可以说 x 和 y 不相等,也就意味着在排序时没有偏向。这种情况的一个常见示例是对字符串进行排序时,但是要忽略大小写。如果以大小写敏感为基准,字符串 "A123" 和 "a123" 是不等价的(第一个字母不相同),它们不相同,也不相等。

迭代器的其他操作由它的类别决定。可以在前面章节看到每种迭代器的特定操作,而且因为迭代器的累加特性,随机访问迭代器可以支持全部操作。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
以一L0
粉丝 0 资源 1143 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  123
统信桌面专业版【全盘安装UOS系统】介绍  117
银河麒麟桌面操作系统安装佳能打印机驱动方法  109
银河麒麟桌面操作系统 V10-SP1用户密码修改  102
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益209.03元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!