2017-07-31 49 views
-1

我對C++非常陌生,我試圖理解一個大型項目。 這裏是我卡住的地方,我想索引容器類沒有for-each。容器類別索引無For-

有此方法返回容器類酒吧指針:

virtual Bars* getBarsPtr()    { return &bars_; } 

在代碼中,各元件通過的for-each訪問,並且它的工作原理。 Bar是for-each的元素。代碼如下:

for (auto& bar : *foo_.getBarsPtr()) { 

getBarsPtr()返回指向Bars的指針。我想知道的是,如何在沒有for-each的情況下訪問每個「酒吧」。

更新:正如SergeyA回答的那樣,此容器未提供索引訪問。 Regards

+0

與你的問題無關,但我認爲你應該花些時間[閱讀一些很好的初學者書籍](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-列表)並瞭解*參考*。 –

+0

至於你的問題,問題是什麼?爲什麼你想要使用索引來迭代矢量(這是任何[良好的初學者書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)會顯示您)?基於範圍的'for'循環出了什麼問題?使用迭代器有什麼問題? –

+0

http://en.cppreference.com/w/cpp/language/range-for – Justin

回答

0

範圍for循環不一定可轉換爲索引訪問。但是,它總是可以轉換爲迭代器訪問,因爲它就是這樣。

每個遠程for循環等於如下:

for (auto it = std::begin(bar), e = std::end(bar); it != e; ++it) { 
} 

但並不是每一個容器爲索引訪問!最簡單的例子就是列表。您不能訪問列表中的元素編號5,您只能訪問當前元素的下一個和上一個元素。這是這個結構背後的基本思想。

我會想象,你的數據結構是相同的質量(你永遠不提供實際的結構!)什麼它定義beginend成員,但不提供operator[]的覆蓋,這將需要對索引訪問。

+0

非常感謝,@SergeyA! 完全如您所說,「它定義了開始和結束成員,但沒有爲運算符[]提供覆蓋,這對索引訪問是必需的。」 – oguz