Đây là một đóng gói khá bình thường của một container STL cho phép người dùng của Cfoo để iterate container mà không cho phép thay đổi bên trong.iterating đóng gói container STL lồng nhau
#include <vector>
class Cfoo
{
public:
class Cbar
{
/* contents of Cbar */
};
typedef std::vector<Cbar> TbarVector;
typedef TbarVector::const_iterator const_iterator;
public:
const_iterator begin() const { return(barVector_.begin()); }
const_iterator end() const { return(barVector_.end()); }
private:
TbarVector barVector_;
};
Cho đến nay, rất tốt. Chúng ta có thể lặp container như thế này:
Cfoo myFoo;
for (Cfoo::const_iterator it = myFoo.begin(); it != myFoo.end(); ++it)
{
it->DoSomething();
}
Bây giờ tôi muốn thay thế std :: vector với nói một std :: vector lồng nhau:
public:
typedef std::vector<Cbar> TbarVectorInner;
typedef std::vector<TbarVectorInner> TbarVectorOuter;
private:
TbarVectorOuter barContainer_;
Nhưng tôi muốn có thể để lặp qua tất cả các cá thể của Cbar theo cùng cách như trước, để lộ ra một hàm const_iterator, và một phương thức start() const và một phương thức end() const.
Tôi không rõ làm thế nào để làm điều đó, mặc dù tôi nghi ngờ nó liên quan đến việc viết một iterator tùy chỉnh. Có suy nghĩ gì không?
Nó liên quan đến việc viết một trình vòng lặp tùy chỉnh. –
Âm thanh như công việc cho Flattening Iterator từ http://stackoverflow.com/questions/3623082/flattening-iterator – Cubbi
'TbarVector' nên là riêng tư, nó nói với những điều thế giới bên ngoài không liên quan đến nó và dễ bị lạm dụng . –