如何访问(例如,cout)多维STL向量中的迭代器的当前值(c++)
how do I access (e.g., cout) the current value of iterators in multi-dimensional STL vectors (C++)
在使用STL方面我还是个新手。下面的代码片段填充了一个3D向量(S)并编译得很好(g++)。
const int maxBonds = 6;
vector< vector< vector<int> > > S;
S.resize(maxBonds);
populate(S); // function that returns S with various layers filled with int data in rows and columns.
for (vector<vector<vector<int> > >::iterator Slayer = S.begin(); Slayer != S.end(); Slayer++) {
cout << "Layer contains " << Slayer->size() << " rows" << endl;
for (vector<vector<int> >::iterator Srow = Slayer->begin(); Srow != Slayer->end(); Srow++) {
for (vector<int>::iterator Scol = Srow->begin(); Scol != Srow->end(); Scol++) {
cout << *Scol;
}
cout << endl;
}
cout << endl;
}
运行正常:
Layer contains 0 rows
Layer contains 5 rows
000
200
020
220
002
Layer contains 12 rows
100
010
210
... // etc.
但是,我想在迭代期间打印出外部迭代器(Slayer, snow)的值。如何正确地解引用Slayer的当前值,即
cout << "Layer # " << Slayer->??? << " contains " << Slayer->size() << " rows" << endl;
如果您需要的是当前矢量"索引",我认为这样做的标准方法是增加另一个值。
unsigned int countSlayer = 0;
for (vector<vector<vector<int> > >::iterator Slayer = S.begin(); Slayer != S.end(); Slayer++, ++countSlayer) {
cout << "Layer # " << countSlayer << " contains " << Slayer->size() << " rows" << endl;
for (vector<vector<int> >::iterator Srow = Slayer->begin(); Srow != Slayer->end(); Srow++) {
for (vector<int>::iterator Scol = Srow->begin(); Scol != Srow->end(); Scol++) {
cout << *Scol;
}
cout << endl;
}
cout << endl;
}
您也可以尝试从迭代器中减去begin(),但它并不适用于所有迭代器类型(我没有时间进行一些测试)。
所以*Scol
得到的是最后一个向量中的整型,*Srow
得到的是行向量,*Slayer
得到的是包含行向量的层向量
你不能直接这么做。
我的做法是——定义一个带循环的函数来帮你完成。
类似:
void Print2dIntVector( const vector<vector<int> >& v )
{
// ..
}
void Print3dIntVector( const vector< vector< vector<int> > >& v )
{
// ..
}
建议-使用typedef
,而不是写所有这些长,嵌套向量。
EDIT:当然,您总是可以为这些类型(向量)重载operator<<
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 不明白迭代器,引用和指针失效,一个例子
- 我可以使用反向迭代器作为ForwardIt吗
- ESP8266单片机矢量迭代器的C++问题
- 如何在C++中将迭代器作为函数参数传递
- 是否应避免从非常量迭代器转换为常量迭代器?
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 为什么 C++ std::unordered_map 从 emplace/ 找到返回一个迭代器?