迭代向量向量中的第 i 行
Iterate i'th row in vector of vectors
我使用向量的向量
创建了一个2D数组vector< vector<int> > vvi;
我可以用下面的迭代器迭代整个向量:
std::vector< std::vector<int> >::iterator row;
std::vector<int>::iterator col;
for (row = vvi.begin(); row != vvi.end(); ++row)
{
for (col = row->begin(); col != row->end(); ++col)
{
std::cout << *col;
}
}
我不需要穿越整个2D阵列,而需要像这样遍历任何一行,但它不起作用
std::vector< std::vector<int> >::iterator row;
std::vector<int>::iterator col;
row = vvi[i];
for (col = row->begin(); col != row->end(); col++) {
std::cout << *col;
}
我如何解决此问题。任何帮助将不胜感激!
在您的代码中, row
是迭代器,因此您无法为其分配vvi[i]
。在您的情况下,这可以起作用:
#include <iterator>
// ...
std::vector<std::vector<int> >::iterator row = vvi.begin();
std::advance(row, i);
for (std::vector<int>::iterator col = row->begin(); col != row->end(); ++col) {
std::cout << *col << std::endl;
}
您也可以做一些简单的事情(如下C 11(:
for (auto const& x : vvi[i]) { std::cout << x << std::endl; }
如果您不想使用范围的语法,则另一种替代解决方案可能是:
auto const& row = vvi[i];
for (auto col = row.cbegin(); col != row.cend(); ++col)
{
std::cout << *col << std::endl;
}
请注意,在这里我使用了cbegin()
和cend()
,而不是begin()
和end()
。(如果您不确定差异,请对迭代器和const_itertor进行一些研究。(
最后一句话:在两个示例中,我都将增量运算符用作前缀(++col
((就像您在第一个示例中一样(:在您的情况下,无需上空版本提供的开销。(即使这是一个微妙的性能,也不是必需的。(
真正希望我能提供帮助。
相关文章:
- std::向量迭代器和调整大小/保留的奇怪/有趣行为
- 如何取消引用向量迭代器
- Map中的(字符串的)向量迭代器
- C++将向量迭代器转换为索引
- yaml-cpp到std::向量迭代的怪异行为
- 使用索引与迭代器将向量迭代到倒数第二个元素
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- 向量迭代器不兼容的错误,用于保存另一个向量的迭代器的向量
- C++向量迭代器nth_element编译错误
- 无法查找值初始化的向量迭代器?
- C++向量迭代:常量 vs. 常量自动 vs. 无常量
- 向量迭代编译为非常不同的指令
- STD ::向量迭代器类型和允许的操作
- 如何通过尺寸未知的2D向量迭代
- 向量迭代器 < 或 !=
- 如何通过共享_ptr向量迭代
- 如何通过向量迭代作为指针
- 通过向量迭代,而其他线程可能会对其进行修改
- 我如何通过C 中的字符串向量迭代
- 向量迭代器在新对象的 push_back() 之后不兼容