C++ 向量的自定义迭代器<;结构>;
假设我有一个C++ 向量的自定义迭代器<;结构>;,c++,c++11,vector,struct,iterator,C++,C++11,Vector,Struct,Iterator,假设我有一个struct,如下所示: struct S { int a; string b; //.... }; 我有一个向量,这个struct: vector<S> vect(100); 向量向量(100); 我想让随机访问迭代器指向所有vectint的成员(本例中为a) 如何实现它?只需包装一个std::vector::iterator。除了操作符*之外,所有操作符都可以直接转发,当然它必须返回S::a一种优雅的方法是操作符*重载,直接在结构内
struct
,如下所示:
struct S
{
int a;
string b;
//....
};
我有一个向量,这个struct
:
vector<S> vect(100);
向量向量(100);
我想让随机访问迭代器
指向所有vect
int的成员(本例中为a)
如何实现它?只需包装一个
std::vector::iterator
。除了操作符*
之外,所有操作符都可以直接转发,当然它必须返回S::a
一种优雅的方法是操作符*重载,直接在结构内部:
struct S {
int a;
string b;
inline int operator*() const {
return a;
}
};
这样,当您在vector中迭代S元素时,可以通过以下简单方式访问“a”:
std::vector<S*> vect(100);
std::vector<S*>::iterator it = vect.begin();
for(; it != vect.end(); ++it) {
std::cout << **it;
}
标准:向量向量(100);
std::vector::iterator it=vect.begin();
for(;it!=vect.end();++it){
std::cout上描述了您需要实现什么?您尝试过了吗?您的代码在哪里?您在哪里被卡住了?(这应该很像为所有的编写一个迭代器,除了在取消引用时,您将返回一个[
常量
]如果引用Boost库是一个选项,考虑TrimeSyter和.Cux>运算符> <代码>,并且“当然必须通过引用返回S::A”。