c++ - 如何访问(例如,cout)多维 STL vector 中迭代器的当前值 (C++)

标签 c++ stl vector

我在使用 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/

相关文章:

c++ - 在main中查找变量地址?

c++ - 在构造函数 C++ 标准中修改 const 吗?

c++ - 更改构造函数优先级

c++ - ccache 是否完全优于 gcc 的预编译头文件?

c# - 将 STL/C++/CLI 容器传递给 .Net

c++ - 当一个线程锁定一张大 map 时如何避免卡住其他线程

c++ - 如何将数据从 `boost::scoped_array`复制到 `std::vector`

c++ - stack pop() 导致 "reference binding to misaligned address"错误

c++ - 在 C++ 中使用 vector 设置并集算法

c++ - 为什么这个语法无效? vector 指针->[0]