【问题标题】:How container class works in stl?容器类如何在 stl 中工作?
【发布时间】:2019-12-05 22:17:01
【问题描述】:

迭代器定义说 [1]:

Iterator 是一个对象,它使程序员能够遍历容器它也说各种类型的迭代器通常通过容器的接口提供。

Cplusplus.com 有一个大表,其中每个容器都有成员作为迭代器类别函数。

这是否意味着每个容器类都有实现基迭代器类的迭代器类和该迭代器类中的各种函数,这些函数将实例化并与该容器类一起工作以遵循接口。

我的问题是一个类如何允许另一个类拥有接口?

【问题讨论】:

  • “实现基迭代器类的迭代器类” 迭代器不必从任何类继承。 (有一个已弃用的std::iterator,但从它继承是可选的。)“一个类如何允许另一个类拥有接口?”你是什么意思?
  • @HolyBlackCat 是的,请不要使用 interface 关键字。
  • @HolyBlackCat in wikipedia "各种类型的迭代器通常通过容器的接口提供"这个接口在这里的含义。
  • @ParsuramKailasa 在这里,en.cppreference.com/w/cpp/named_req/Iterator。这个页面有最低要求,有链接到描述更复杂的迭代器要求的页面。请注意,这些要求不是通常的 OO 意义上的接口。他们只是记录了涉及迭代器的表达式的预期行为。因此,只要您的类支持所需的操作,您就可以以任何您喜欢的方式实现迭代器。

标签: c++ interface iterator


【解决方案1】:

C++ 没有关键字interface。类的(公共)“接口”它的(公共)成员。这可以包括type aliases

所有容器都提供名为iteratorconst_iterator 的类型别名,它们引用具有所述属性的类型。它们还有名为beginend 的公共成员函数,它们被重载以返回该容器的iterators 和const_iterators。

Iterator++ 前进和 * 取消引用的任何内容。 int * 就是这样一种类型,_Tree_iterator<_Tree_simple_types<_Tmap_traits<int, int, ...>>> 1

也是

标准没有指定vector<T>::iterator et.al 的类型。表示,仅满足RandomAccessIterator

  1. Microsoft 版本std::map<int, int>::iterator 的(部分)类型

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多