gpt4 book ai didi

c++ - 如何在 C++ 中使用二维数组的迭代器?

转载 作者:行者123 更新时间:2023-12-02 10:03:18 26 4
gpt4 key购买 nike

我想对二维数组使用迭代器,但我不知道该怎么做。

我的目的是访问列而不是行。

我发现要访问行我可以使用此 auto it=begin(arr); 但我认为这不是正确的方法,但它似乎有效。

#include <iostream>
#include <iterator>

using namespace std;

int main(){
int arr[3][3];
for (int i=0;i!=3;i++)
for (int j=0;j!=3;j++)
arr[i][j]=rand()%9;

for (int i=0;i!=3;i++)
for (int j=0;j!=3;j++){
cout<<arr[i][j]<<' ';
if (j==2)
cout<<'\n';
}

auto it=begin(arr);
cout<<**it<<endl;

这是正确的吗?

提前致谢:D

最佳答案

这是一对简单的迭代器,它们按行优先和列优先的顺序排列。

class row_iterator
{
int (&arr)[3][3];
std::size_t pos;
public:
row_iterator(int (&arr)[3][3], std::size_t pos) : arr(arr), pos(pos) {}

row_iterator& operator++() { ++pos; return *this; }
row_iterator operator++(int) { auto that = *this; ++pos; return that; }
int & operator*() { return arr[pos / 3][pos % 3]; }
int * operator->() { return &arr[pos / 3][pos % 3]; }

friend bool operator==(row_iterator lhs, row_iterator rhs) { return (lhs.arr == rhs.arr) && (lhs.pos == rhs.pos); }
friend bool operator!=(row_iterator lhs, row_iterator rhs) { return !lhs == rhs; }
};

row_iterator row_begin(int (&arr)[3][3]) { return row_iterator(arr, 0); }
row_iterator row_end(int (&arr)[3][3]) { return row_iterator(arr, 9); }

class col_iterator
{
int (&arr)[3][3];
std::size_t pos;
public:
col_iterator(int (&arr)[3][3], std::size_t pos) : arr(arr), pos(pos) {}

col_iterator& operator++() { ++pos; return *this; }
col_iteratoroperator++(int) { auto that = *this; ++pos; return that; }
int & operator*() { return arr[pos % 3][pos / 3]; }
int * operator->() { return &arr[pos % 3][pos / 3]; }

friend bool operator==(col_iterator lhs, col_iterator rhs) { return (lhs.arr == rhs.arr) && (lhs.pos == rhs.pos); }
friend bool operator!=(col_iterator lhs, col_iterator rhs) { return !lhs == rhs; }
};

col_iterator col_begin(int (&arr)[3][3]) { return col_iterator(arr, 0); }
col_iterator col_end(int (&arr)[3][3]) { return col_iterator(arr, 9); }

关于c++ - 如何在 C++ 中使用二维数组的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61481647/

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