嵌套迭代器访问
Nested iterators access
我有一个关于迭代器的问题。问题是:"我如何访问(如果它是嵌套迭代器)行中较高或较低的元素
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::distance
和std::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';
}
}
相关文章:
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 如何为我的容器实现随机访问迭代器?
- 对于C++随机访问迭代器(矢量迭代器),迭代器之间的差异是如何计算的?
- 对于随机访问迭代器(矢量迭代器),迭代器C++样式指针吗?
- 随机访问迭代器:我错过了什么?
- 有没有办法在C++中制作无锁"counter"随机访问迭代器?
- 如何确保函数模板的参数是随机访问迭代器
- C++基于现有随机访问迭代器的反向迭代器
- 如何实现随机访问迭代器的"less than operator"?
- 随机访问迭代器和Deque
- 在链表上实现随机访问迭代器
- 如何在C++中比较两个非随机访问迭代器
- C++随机访问迭代器超出范围
- 访问迭代器,向量在库存.h
- 具有deque的随机访问迭代器的迭代器无效
- 访问迭代器值会导致segfault 11
- 基于指针的基本随机访问迭代器的代码
- 将多映射迭代器转换为随机访问迭代器
- 在 65536 位置访问迭代器的指针运算符会导致段错误
- 在并行数组上编写随机访问迭代器