std::iterator и пользовательский итератор
Почему не получается так сделать? Ведь
vector<int> :: iteratorв моём понимании унаследован отrandom_access_iterator.vector<int> vec({5, 4, 2, 3, 1});vector<int> :: iterator it = vec.begin()const iterator<random_access_iterator_tag, int>& i = it;Нужно сделать, чтобы метод класса контейнера принимал и
std::iteratorиMyIterator, который уже написан мной. Думал, что можно было бы базовый класс.Как можно решить проблему пункта 2.
Ответы (1 шт):
На самом деле, итератор вектора не наследуется от random_access_iterator. Итератор вектора - отдельная структура в которой просто прописан его тэг следующим образом:
using iterator_category = random_access_iterator_tag;
Вашу проблему можно решить следующим образом (используется стандарт C++20)
#include <iterator>
//...
template <std::random_access_iterator Iter>
return_type method_name(const Iter& iter, ...) {
//...
}
Тогда ваш метод сможет принимать все итераторы, являющиеся random access.