Написание итератора с использованием шаблонного стека - PullRequest
0 голосов
/ 16 марта 2012

Как именно можно написать конечную функцию для шаблонного класса, названного Stack, который реализован с использованием массива, чтобы выйти за пределы массива?

Это мой текущий конец ()function:

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 голосов
/ 16 марта 2012

Не должно быть items[-1].Для массива размера n это должно быть items[n].В C ++ 11 вы можете найти std::end, который может выполнять эту работу.

Конечно, вы можете просто использовать std::stack ... но эй.простой смысл работает только с массивами в одном направлении.Если вы хотите выполнить обратную итерацию над собственным массивом, вы должны начать с прямого диапазона [begin, end) и реализовать обратную итерацию оттуда.

...