gpt4 book ai didi

c++ - 二维数组的自定义迭代器

转载 作者:搜寻专家 更新时间:2023-10-31 00:13:13 27 4
gpt4 key购买 nike

<分区>

我尝试为 2D 数组制作自定义迭代器以按列迭代它。我想通过这个测试实现的是操纵二维数组值。例如这个脚本产生一个输出:

0 1 2
3 4 5
6 7 8

借助列迭代器和 std::reverse 我可以像这样操作二维数组来获得输出

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)
{}

....

很多代码bla bla

....

    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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com