我有一个关于迭代器的问题。问题是:“我如何访问(如果它是嵌套迭代器)行中的元素,更高或更低。这是一个我的意思的例子:
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';
}
}
}
我知道向量具有快速的大小功能,但是为了概括代码,在我看来,最好使用迭代器(正如我的导师所说)。那么如何使用迭代器和向量一样做呢?
答案 0 :(得分:6)
由于迭代器是非数字的,因此它们不适合这个问题。
您可以使用std::distance
和std::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';
}
}