定製迭代器假設我有一個struct
這樣的:矢量<struct>
struct S
{
int a;
string b;
//....
};
,我有這個struct
的向量:
vector<S> vect(100);
我想有random_access iterator
指向所有的vect
int的成員(在這種情況下) 我該如何實現它?
定製迭代器假設我有一個struct
這樣的:矢量<struct>
struct S
{
int a;
string b;
//....
};
,我有這個struct
的向量:
vector<S> vect(100);
我想有random_access iterator
指向所有的vect
int的成員(在這種情況下) 我該如何實現它?
一種優雅的方式可能是運營商*超載,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;
}
有:
只是包裝std::vector<S>::iterator
。所有運營商可以直接轉發除了operator*
這當然必須返回S::a
而'operator - >',並且「當然必須通過引用*返回S :: a」* –
@TonyD:即使'operator *'也必須,因爲'* it = 5'也必須合法。 – MSalters
您需要實現在http://en.cppreference.com/w/說明什麼cpp/concept/RandomAccessIterator你試過了嗎?你的代碼在哪裏?你卡在哪裏? (它應該與爲所有S編寫一個迭代器非常相似,除了解引用之外,您將單獨返回一個['const']引用到'a'。 –
如果Boost庫是一個選項,請考慮transform_iterator。 – jrok