指向向量的向量的迭代器
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)
我想打印每个子向量中的第一个元素的以下代码出错了:
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)