使用模板化堆栈编写迭代器

时间:2012-03-15 20:39:03

标签: c++ templates iterator

如何为一个名为Stack的模板化类编写end函数,使用数组实现超出数组边界的那个?

这是我当前的end()函数:

template<typename T>
StackIterator<T> Stack<T>::end() const
{
    //iterator takes a stack and an item of type <T>
    StackIterator<T> goodBye(*this, items[-1]);
    return goodBye;
}//end end function

这个当前的实现将适用于原始类型,但抛出一个 与字符串一起使用时,内存位置(...)的bad_alloc。

关于如何使这种更多功能的任何想法?

1 个答案:

答案 0 :(得分:0)

不应该是items[-1]。对于大小为n的数组,它应为items[n]。在C ++ 11中,您可以找到可以完成此任务的std::end

当然,你可以使用std::stack ......但是嘿。

编辑:普通意义上的迭代仅适用于一个方向上的本机数组。如果您希望反向遍历本机数组,则必须从前向[begin, end)范围开始,并从那里实现反向迭代。