2D 数组的自定义迭代器
custom iterator for 2D array
我尝试为 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
您没有在全局范围内实现swap
,而是在类中实现了swap
。
如果您实现了适当的swap
则可以使其工作。了解如何为我的类提供交换功能?
您的测试尝试交换临时变量;请改用变量:
auto begin0 = begin(matrix, 0);
auto end0 = end(matrix, 0);
begin0.swap(end0);
或者使用右值引用提供swap
重载。
相关文章:
- 跟随整数索引列表的自定义类迭代器
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- 自定义 STL 兼容迭代器,用于迭代 2D 数组类的列
- 无法使用自定义迭代器进行排序
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- 使用迭代器的自定义比较器函数
- 具有迭代器和自定义步长的循环结束条件
- 在C++中使用带有自定义向量的迭代器
- 指向临时对象的自定义迭代器(延迟加载)
- MSVC++ 17 std::copy 期望自定义迭代器的"operator -"
- 如何使用提升范围将自定义迭代器封装在函数中
- 字符串反向迭代器自追加的持久性
- 如何将 std::num_put 与自定义迭代器一起使用?
- 自定义迭代器:如果 a 和 b 的行为不同,如何正确处理距离计算和相等比较
- 迭代器关系运算符出错(带单独链接和迭代器的自定义哈希表)
- std::sort 在我的自定义迭代器上不起作用
- 为自定义数组实现迭代器
- C++自定义惰性迭代器
- 奇怪的编译器错误,说明我的迭代器未定义
- c++迭代器操作符定义