我有一个MyClass
的向量,以这种方式创建:
class MyClass {
friend Class MyOtherClass;
public:
MyClass();
~MyClass()
// some functions...
private:
MyOtherClass other;
std::string hgnc_symbol;
uint_64 start_p;
uint_64 stop_p;
int objID;
std::vector<MyClass> list;
};
我真的很难使用迭代器,因为我无法弄清楚如何正确访问存储在向量中的对象的字段。
我从文件中填充list
个读取元素。一切都很好,因为list.size()
返回正确数量的元素。当我想通过它的objID
检索一个对象时,我使用一个迭代器迭代列表的对象。这是我一直在尝试的代码
MyClass getByID(int id) {
std::vector<MyClass>::iterator it;
for(it=list.begin(); it!=list.end(); ++it){
if((*it)->objID == id) {
std::cout << "FOUND! " << (*it)->objID << "\n";
return (*it);
}
}
}
但在这种情况下,无法解析字段objID
。尝试
...
if((*it).objID == id)
std::cout << "ID = " << (*it).objID << "";
...
该字段已解决,但它会打印数千个ID = 0
,就好像添加到列表中的所有对象都是空的一样。
我应该创建一个指向对象的指针向量(如std::vector<MyClass*> list;
)吗?会有什么帮助吗?我实际上尝试但没有任何改变:我仍然无法访问每个对象的字段,即使迭代器返回指向它的指针。
答案 0 :(得分:1)
也许考虑使用std::map
来代替,使用objID
作为关键字保存对象:
std::map<int, MyClass> objects;
objects.insert(std::make_pair(objId, MyClass));
// later.. do what you want with the data by simply using:
objects.at(someID) ...
正如您所看到的,它可以为您处理所有迭代/循环,并可能使您的代码更清晰。如果您有兴趣,请good tutorial。