嵌套迭代器访问

Nested iterators access

本文关键字:访问 迭代器 嵌套      更新时间:2023-10-16

我有一个关于迭代器的问题。问题是:"我如何访问(如果它是嵌套迭代器)行中较高或较低的元素

for( auto i = graphMatrix.begin();i != graphMatrix.end();i++ )
{
    for( auto j = i->begin();j != i->end();j++ )
    {
        if( *j == 'O' )
        {
          // here we must analyze an element which is a row higher or lower
        }
    }
}

下一件事是我想做的(但它是用矢量):

 for( int i = graphMatrix.size();i < graphMatrix.size();i++ )
{
    for( int j = graphMatrix.size();j < graphMatrix.size();j++ )
    {
        if( graphMatrix[i][j] == 'O' )
        {
           graphMatrix[j][i] == 'X';
        }
    }
}

我知道vector有快速大小函数,但在我看来,为了推广代码,最好使用迭代器(正如我的导师所说)。那么,我如何用迭代器和vector做同样的事情呢?

由于迭代器是非数字的,它们不太适合这个问题。

您可以使用std::distancestd::advance编写复杂、混乱且可能代价高昂的代码,在迭代器上执行"指针运算"。。。或者你可以坚持你的数字循环计数器方法,这正是我想要做的。特别是当你使用vector时,它对任意位置的任意元素有恒定的时间(而且,让我们面对现实,立即)访问。

如果你想知道为什么在这种情况下,迭代器突然不是你所学到的"更好"的迭代机制:这是因为必须为作业使用正确的工具,而没有任何技术是所有作业的正确工具。

使用std::distance:从迭代器中获取向量的位置

for( auto i = graphMatrix.begin();i != graphMatrix.end();i++ )
{
    for( auto j = i->begin();j != i->end();j++ )
    {
        int x = std::distance(graphMatrix.begin(),i);
        int y = std::distance(i->begin(),j);
        graphMatrix[x][y] = 'x';

    }
}