我在使用 STL 方面仍然是一个新手。以下代码片段填充 3D vector (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、Srow)的值。我如何正确取消引用 Slayer 的当前值,即
cout << "Layer # " << Slayer->??? << " contains " << Slayer->size() << " rows" << endl;
最佳答案
如果您需要的是当前 vector “索引”,我认为执行此操作的标准方法是增加另一个值。
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(),但它不适用于所有迭代器类型(我没有时间进行一些测试)。
关于c++ - 如何访问(例如,cout)多维 STL vector 中迭代器的当前值 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5860604/