指向向量的向量的迭代器

iterator to a vector of vector of int

我想打印每个子向量中的第一个元素的以下代码出错了:

vector<vector<int>> logs{{0, 0}, {1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}};
for (auto beg = logs.begin(); beg != logs.end(); beg++) {
    cout << *beg[0] << endl;
}

错误来自 cout << *beg[0]...:

Indirection requires pointer operand ('std::vector<int, std::allocator<int>>' invalid)

所以我的问题是:迭代器的引用应该是向量“logs”中的一个子向量,所以我使用下标来访问它的第一个元素。为什么有一个 std::vector<int, std::allocator<int>> 对象? std::allocator<int> 从哪里来?如何访问子向量中的元素?

问题(上述错误的原因)是由于operator precedence,表达式*beg[0]被分组为(或等同于):

*(beg[0])

无法工作,因为 beg 是一个迭代器并且没有 [] 运算符。这是因为运算符 [] 的优先级高于运算符 *.

要解决此问题,请将 cout << *beg[0] << endl; 替换为:

cout << (*beg)[0] << endl;  //or use beg->at(0)

Demo