是否有任何成员名为std vector iterator operator ==?

时间:2015-04-09 19:32:41

标签: c++ stl

我无法编译:

//cygwin g++ 4.9.2
std::vector<int> v;
std::vector<int>::iterator i;
i.operator==(v.begin()); //error: ...has no member named 'operator=='
有人请让我知道发生了什么。

3 个答案:

答案 0 :(得分:3)

为什么你认为这样的成员函数存在?比较运算符不必是成员函数。

它也可以定义为全局函数:

template <class T>
bool operator(typename vector<T>::iterator left, typename vector<T>::iterator right)
{
    //...
}

在您的情况下,这可能不一定有效:

i.operator==(v.begin());

虽然这总是有效:

i == v.begin();

此外,如果你真的想要使用这种不自然的语法,你可以这样称呼它:

operator==(i, v.begin());

但请注意,由于您没有初始化i,因此结果可能非常难以预测。

答案 1 :(得分:1)

,没有。

有一个自由函数需要两个这样的迭代器。

#include <vector>

int main()
{
    std::vector<int> v;
    std::vector<int>::iterator i;
    operator==(i, v.begin()); // OK
}

live demo

只需以正常方式调用==,并让i在您进入时引用某些内容!

答案 2 :(得分:1)

为什么期望这样做?

std::vector::iteratorRandom Access Iterator,必须与==相当(即必须Equality comparable,与所有Input Iterators一样),但不需要有一个成员operator==。非会员就足够了。