我正在构建自己的向量类,类似于可以找到C ++ STL的向量。在我的头文件中,有两个类,即向量类和迭代器类,这是一个嵌套的模板类。我想知道嵌套迭代器类的返回类型的正确语法是什么。在这种情况下,对于我的代码,我正在寻找为我的begin()
函数和end()
函数编写正确的返回类型语法的正确方法,这两个函数都在我的向量类中。双方begin()
并end()
都应该具有的返回类型vector <T> :: iterator
,但似乎并不奏效。这是我当前代码的设置方式。
template <class T>
iterator;
/************************************************
* VECTOR
* A class that holds stuff
***********************************************/
template <class T>
class vector
{
public:
// code removed for brevity
// Methods of the Vector class
vector <T> :: iterator begin();
vector <T> :: iterator end();
private:
// Code removed for brevity
};
/**************************************************
* VECTOR ITERATOR
* An iterator through array
*************************************************/
template <class T>
class vector <T> :: iterator
{
// ...code removed for brevity
};
此外,对于.h文件顶部的以下两行,我是否有正确的代码?
template <class T>
iterator;
还是这个?
template <class T>
vector <T> :: iterator;
谢谢!
您只需将的定义iterator
移至vector
:
template <class T>
class vector {
public:
class iterator {
/* How you implement a iterator of type T */
};
iterator begin(); // for example
// other fantastic stuff
};
template <class T>
vector<T>::iterator vector<T>::begin()
{
// whatever
}
如果您不想定义iterator
内部,可以这样做:
template <class T>
class vector {
public:
class iterator; // only a declaration
iterator begin(); // same
// other fantastic stuff
};
template <class T>
class vector<T>::iterator {
// the actual definition goes here
};
template <class T>
vector<T>::iterator vector<T>::begin()
{
// same
}
另外,您也可以iterator
单独定义并创建vector::iterator
别名:
template <class T>
class iterator { /* real definition */ };
template <class T>
class vector {
public:
using iterator = ::iterator<T>;
// or typedef ::iterator<T> iterator;
iterator begin(); // still the same
// same fantastic stuff
};
template <class T>
vector<T>::iterator vector<T>::begin()
{
// all the same
}
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句