我有一个任务让我发疯。我一直在研究基本概念以增加我的知识并尝试将其应用于这个问题,但我有点卡住了。
我们有一个 main.cpp 文件,用于测试具有以下语法的 VectorOfVectors 类:
for( int num : intVov )
{
printf( "%d ", num );
}
我们正在创建自己的 VectorOfVectors 类,并将模板化向量作为项目。
我们必须通过创建我们自己的迭代所有值的自定义迭代器来使 main 函数正常工作,如 main 函数所示。我一直在研究基于范围的迭代器,但我对如何构建自己的迭代器有点困惑,而且因为它是向量的向量,所以语法与一些在线示例不太匹配。
我想获得有关如何创建此迭代器的指导。我知道我需要一个 begin() 和 end() 函数,并覆盖 operator++ 函数以使其工作。我的迭代器会使用 int 值作为我在 operator++ 中递增的指针吗?我需要两个指针吗?begin() 和 end() 会返回什么、迭代器、整数、T 值或向量?我应该如何构造迭代器以及我需要哪些数据?迭代器构造函数会将两个指针作为值,还是一个,或者它是如何工作的?迭代器是否需要它自己的 VectorOfVectors 副本来迭代(并在构造函数中设置)?
我将如何增加指针?任何帮助、一般知识甚至提示将不胜感激!
这是我一直在摆弄的东西,仅供参考。
#include <vector>
using std::vector;
template< typename T > class VectorOfVectors
{
public:
class iterator
{
public:
//Constructor
iterator(const VectorOfVectors<T> * vov, int pos_vov, int pos_v)
{
_pos_vov = pos_vov;
_pos_v = pos_v;
_vov = vov;
}
bool operator!= (const iterator & other) const
{
return pos != other._pos;
}
int operator* () const;
const iterator operator++ ()
{
_pos_v++;
if (_pos_v == _pos_vov->end())
{
_pos_vov++;
if (_pos_vov == _vov.end())
{
--_pos_vov;
_pos_v = _pos_vov->end();
--_pos_v;
return (*this);
}
else
{
_pos_v = _pos_vov->begin();
return (*this);
}
}
else
{
return (*this);
}
}
private:
int _pos_v;
int _pos_vov;
const VectorOfVectors<T> * _vov;
};
void AddEmptyVector()
{
vectorOfVectors.push_back(new vector<T>());
}
int GetVectorCount() const
{
return vectorOfVectors.size();
}
vector<T> GetVectorAtIndex(int index)
{
return vectorOfVectors.at(index);
}
void AddCopyOfVector(vector<T> & toBeAdded)
{
vectorOfVectors.push_back(toBeAdded);
}
iterator begin() const
{
return iter(this, 0, 0);
}
iterator end() const
{
return iterator(this, 4, 3);
}
private:
vector< vector<T> > vectorOfVectors = new vector< vector<T> >();
};