我真的用谷歌搜索了很多,但我找不到答案。
STL 迭代器重载了哪些运算符?即list<t>::iterator, vector<t>::iterator, etc
。
我知道这些:
* - dereference operator
++ - increment operator (both postfix and prefix)
我不知道更多。回到最初的问题:stl 迭代器定义了哪些操作符?
这将取决于迭代器的类别:http ://www.cplusplus.com/reference/iterator/iterator/
或者也许在这个链接上更清楚:http: //en.cppreference.com/w/cpp/iterator
正如评论中所建议的,这是标准的一小部分:
24.2.1 总则
- [...]本国际标准根据其上定义的操作定义了五类迭代器:输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器,如下所示:
Random Access -> Bidirectional -> Forward -> Input
-> Output
例如,前向迭代器满足输入迭代器的所有要求。
24.2.2 迭代器
迭代器需求构成了迭代器概念分类的基础;每个迭代器都满足迭代器要求。这组要求指定了取消引用和递增迭代器的操作。大多数算法将需要额外的操作来读取 (24.2.3) 或写入 (24.2.4) 值,或者提供更丰富的迭代器动作集。
就像据说迭代器有定义我们可以对它们执行的操作的要求。
这取决于迭代器的类型。对于前向迭代器(最简单的),您需要:
class ForwardIterator
{
public:
typedef ... difference_type; // usually ptrdiff_t
typedef ... value_type;
typedef ... pointer; // usually value_type*
typedef ... reference; // must be value_type&
typedef std::forward_iterator_tag iterator_category;
// advance...
ForwardIterator& operator++();
ForwardIterator operator++( int );
// access...
reference operator*() const;
pointer operator->() const;
// check for end...
bool operator==( Iterator const& other ) const;
bool operator!=( Iterator const& other ) const;
};
typedef
除非您专门
std::iterator_traits
针对迭代器类型,否则这是必需的。它们可以通过从公共继承来提供std::iterator
(它为除
iterator_category
和之外的所有内容提供适当的默认值value_type
)。
双向迭代器也需要这两个operator--
,而随机访问迭代器需要更多。
您可以在此处找到向量迭代器的列表: 随机访问迭代器运算符
对于这里的列表迭代器: 双向迭代器运算符
简而言之,对于向量迭代器(并非详尽无遗),还有:
对于列表迭代器和向量迭代器: