嵌套迭代器访问

时间:2013-11-25 14:51:28

标签: c++

我有一个关于迭代器的问题。问题是:“我如何访问(如果它是嵌套迭代器)行中的元素,更高或更低。这是一个我的意思的例子:

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';
        }
    }
}

我知道向量具有快速的大小功能,但是为了概括代码,在我看来,最好使用迭代器(正如我的导师所说)。那么如何使用迭代器和向量一样做呢?

2 个答案:

答案 0 :(得分:6)

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

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

如果你想知道为什么,在这种情况下,迭代器突然不是你曾经被教过的“更好”的迭代机制:它是因为必须使用正确的工具来完成工作,并且没有技术是所有作业的正确工具。

答案 1 :(得分:0)

使用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';


    }
}