2014-02-20 446 views
1

定製迭代器假設我有一個struct這樣的:矢量<struct>

struct S 
{ 
    int a; 
    string b; 
    //.... 
}; 

,我有這個struct的向量:

vector<S> vect(100); 

我想有random_access iterator指向所有的vect int的成員(在這種情況下) 我該如何實現它?

+1

您需要實現在http://en.cppreference.com/w/說明什麼cpp/concept/RandomAccessIterator你試過了嗎?你的代碼在哪裏?你卡在哪裏? (它應該與爲所有S編寫一個迭代器非常相似,除了解引用之外,您將單獨返回一個['const']引用到'a'。 –

+4

如果Boost庫是一個選項,請考慮transform_iterator。 – jrok

回答

1

一種優雅的方式可能是運營商*超載,direcly內部結構:

struct S { 
    int a; 
    string b; 
    inline int operator*() const { 
     return a; 
    } 
}; 

這樣,當你重複小號元素矢量,您可以訪問到 'A' 在這個簡單的方法:

std::vector<S*> vect(100); 
std::vector<S*>::iterator it = vect.begin(); 
for(; it != vect.end(); ++it) { 
    std::cout << **it; 
} 

有:

  • *它:通過迭代器你訪問元素指針
  • **它:訪問元素的感謝超載
2

只是包裝std::vector<S>::iterator。所有運營商可以直接轉發除了operator*這當然必須返回S::a

+0

而'operator - >',並且「當然必須通過引用*返回S :: a」* –

+0

@TonyD:即使'operator *'也必須,因爲'* it = 5'也必須合法。 – MSalters

相關問題