簡體   English   中英

指向向量的向量的迭代器

[英]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>> object? std::allocator<int>從哪里來? 如何訪問子向量中的元素?

問題(上述錯誤的原因)是由於operator precedence ,表達式*beg[0]被分組為(或等同於):

*(beg[0])

這是行不通的,因為beg是一個迭代器並且沒有[]運算符。 這是因為運算符[]的優先級高於運算符*

要解決此問題,請替換cout << *beg[0] << endl; 和:

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

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM