Я попытался сделать пользовательский итератор для 2D-массива, чтобы перебирать его по столбцу. то, что я хочу достичь этим тестом, заключается в том, чтобы манипулировать значениями 2d массива. , например, этот сценарий с получением из положить:пользовательский итератор для 2D-массива
0 1 2 3 4 5 6 7 8
по помощи столбца итератора и std::reverse
я могу манипулировать 2d массив, чтобы получить из положить, как этот
6 1 2 3 4 5 0 7 8
однако. такой же результат можно выполнить с помощью std :: swap. поэтому я повторил тестовый сценарий путем свопинга, но он терпит неудачу.
мой вопрос, является ли своп для любого класса итератора просто манекеном функции-члена?
template<typename Container>
class Columniterator : public std::iterator<std::random_access_iterator_tag,
typename std::decay<decltype(std::declval<Container>()[0][0])>::type>
{
using iterator = typename Container::iterator;
using type = typename std::decay<decltype(std::declval<Container>()[0][0])>::type;
public:
Columniterator(iterator _it, size_t _i)
: it(_it), i(_i)
{}
....
много кода бла бла
....
void swap(Columniterator& other)
{
using std::swap;
swap(it, other.it);
}
private:
iterator it;
size_t i;
};
тестовый код
//std::reverse(Columniterator<Container>(container.begin(),0), Columniterator<Container>(container.end(), 0)); // passed
std::swap(Columniterator<Container>(container.begin(),0), Columniterator<Container>(container.end(), 0)); // failed
все еще своп не работает – MORTAL