我有一个关于迭代器的问题.问题是:"我如何访问(如果它是嵌套迭代器)行中的元素,更高或更低.这是我的意思的一个例子:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
接下来就是我想做的事情(但它是矢量):
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';
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道向量具有快速的大小函数,但是为了概括代码,在我看来,最好使用迭代器(正如我的导师所说).那么如何使用迭代器和向量一样做呢?
由于迭代器是非数字的,因此它们不适合这个问题.
您可以编写复杂,令人困惑且可能代价高昂的代码,std::distance并std::advance在迭代器上执行"指针运算"...或者您可以坚持使用数字循环计数器方法,这正是我要做的.尤其是当你使用vectors时,它具有恒定时间(并且,让我们面对它,立即)访问任意位置的任意元素.
如果你想知道为什么,在这种情况下,迭代器突然不是你曾经被教过的"更好"的迭代机制:它是因为必须使用正确的工具来完成工作,而且没有技术是正确的工具为所有工作.