我是一名新的 C++ 程序员,前段时间我学习了 Java 和 ANSI C,并决定试一试。
好吧,我喜欢 C++,但我不喜欢迭代器的工作方式:
在 java 中,您可以将整个容器设为私有并为其迭代器实现一个 getter 函数,并且迭代器有一个方法hasNext()
,该方法根据它是否已到达容器的末尾返回一个布尔值。
我发现在 C++ 上做类似事情的唯一方法是编写 2 个 getter,iteratorBegin()
并且iteratorEnd()
,它返回一个对应于第一个和最后一个位置的迭代器,递增返回的迭代器iteratorBegin()
并将其与 进行比较iteratorEnd()
,允许我迭代容器直到最终已到达位置
但是,我只想使用一个 getter 方法,我想:“让我们创建自己的迭代器类”
到目前为止一切顺利,我已经用集合和列表成功地完成了它,但我似乎无法用地图制作它,这是困扰我的代码:(该类在单独的 .h 中定义,这称为 customIterator .cpp)
template<typename T, typename D>
const D& custIterator<T,D>::next()
{
const D& obj = (*it);
if(hasNext())
{
it++;
}
return obj;
}
//the above works fine
template<typename T, typename D>
const D& custIterator<map<T,D>,D>::next() //error in this line
{
D& obj = (*it).second;
if(hasNext())
{
it++;
}
return obj;
}
编译专用方法时,它说:错误:'map'未在此范围内声明,即使我#include <map>
在文件顶部添加
我正在使用带有代码块的gcc 版本 4.4.5 (Debian 4.4.5-8)
拜托,我需要一些帮助。
感谢您的关注!