我已经搜索了很多,但我无法找到答案。
为STL迭代器重载了哪些运算符?即list<t>::iterator, vector<t>::iterator, etc
。
我知道这些:
* - dereference operator
++ - increment operator (both postfix and prefix)
我不知道更多。回到最初的问题:哪些运算符被定义为stl迭代器?
答案 0 :(得分:4)
它取决于迭代器的类别:http://www.cplusplus.com/reference/iterator/iterator/
或者在这个链接上可能更清楚: http://en.cppreference.com/w/cpp/iterator
正如评论中所建议的,这里有一小部分标准:
24.2.1一般
- [...]本国际标准根据定义的操作定义了五类迭代器:输入迭代器,输出迭代器,转发迭代器,双向迭代器和随机访问迭代器,如下所示:
醇>
Random Access -> Bidirectional -> Forward -> Input
-> Output
例如,Forward迭代器满足输入迭代器的所有要求。
24.2.2迭代器
迭代器要求构成了迭代器概念分类法的基础;每个迭代器都满足迭代器的要求。这组要求指定用于解除引用和递增迭代器的操作。大多数算法需要额外的操作来读取(24.2.3)或写入(24.2.4)值,或者提供更丰富的迭代器移动。
就像据说迭代器有需求来定义我们可以对它们进行的操作。
答案 1 :(得分:3)
这取决于迭代器的类型。对于前向迭代器( 最简单的,你需要:
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--
和
随机访问迭代器需要更多。
答案 2 :(得分:0)
您可以在此处找到矢量迭代器的列表: Random Access Iterator operators
这里的列表迭代器: Bidirectional Iterator operators
简而言之,(并非详尽无遗)向量迭代器也有:
对于列表迭代器和向量迭代器: