我正在尝试使迭代器正常工作,以及不等式i != a.end()
。
我收到错误
no know conversion from argument 2 from 'const a3::vector<int>::iterator' to 'const a3::vector<int>&
为朋友功能。我需要函数来检查迭代器是否不等于vector.end()
并且我不确定如何执行它。
类
#include <iostream>
using std::cout;
using std::endl;
namespace a3
{
template <typename T>
class vector
{
public:
class iterator {
public:
int index_;
vector* a_;
iterator() : index_(-1), a_(0) {}
iterator(int index, vector* a) : index_(index), a_(a) {}
iterator& operator=(const iterator& itr)
{
a_ = itr.a_;
index_ = itr.index_;
return *this;
}
iterator& next() {
index_++;
return *this;
}
iterator& operator++() {
return next();
}
int& operator*() { return (*a_)[index_]; }
};
private:
T* mem_;
int sz_;
public:
vector(int sz) : sz_(sz), b_(0, this), e_(sz, this)
{
mem_ = new T[sz];
}
~vector() { delete[] mem_; }
const T& operator[](T i) const { return mem_[i]; }
T& operator[](T i) { return mem_[i]; }
const int& get_size() const { return sz_; }
const iterator& begin() { return b_; }
const iterator& end() { return e_; }
friend bool operator!=(const iterator& itr1, const vector<T>& vec1)
{
return !(itr1.index_ == vec1.end);
}
private:
iterator b_;
iterator e_;
};
}
主要功能
#include "a3_vector.cpp"
int main(int argc, char** argv)
{
using namespace a3;
vector<int> a(10); // allocate an int array of size 10
for (int i=0; i<10; ++i) a[i] = i*2;
// a now looks as follows
//0,2,4,6,8,10,12,14,16,18
// prints the content of the array
vector<int>::iterator i;
for (i = a.begin(); i != a.end(); i.next()) {
cout << *i << endl;
}
}
答案 0 :(得分:1)
这是根本错误的:
friend bool operator!=(const iterator& itr1, const vector<T>& vec1)
迭代器比较应该比较迭代器。您想要的是比较运算符,如下所示:
friend bool operator!=(const iterator& itr1, const iterator& itr2);
friend bool operator==(const iterator& itr1, const iterator& itr2);
毕竟,这就是这个表达式试图做的事情:
i != a.end()
您正在尝试比较两个迭代器。该错误只是尝试将a.end()
转换为const vector<T>&
,因为这是它为!=
找到的匹配项。只需修复!=
以将迭代器作为第二个参数,你就可以了。