Я новый программист на C ++, я изучил Java и ANSI C некоторое время назад и решил попробовать его.
Что ж, я люблю C ++, но мне не понравилось, как работают итераторы:
В java вы можете сделать весь контейнер приватным и реализовать функцию getter для его итератора, и итератор имеет метод hasNext()
, который возвращает логическое значение в зависимости от того, достиг ли он конца контейнера.
Единственный способ найти что-то похожее на C ++ - это написать 2 геттера, iteratorBegin()
и iteratorEnd()
, которые возвращают целое число, соответствующее первой и последней позициям, увеличивая итератор, возвращаемый на iteratorBegin()
и сравнение с iteratorEnd()
позволило мне перебирать контейнер до тех пор, пока не будет достигнута конечная позиция
Но я хочу использовать только ОДИН метод получения, и я подумал: «Давайте создадим свой собственный итераторкласс "
Пока все хорошо, я успешно справился с наборами и списками, но я не могу сделать это с помощью карт, вот код, который меня беспокоит:lass определяется в отдельном .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) с кодовыми блоками
Пожалуйста, мне нужна помощь.
Спасибо за внимание!