c ++访问对象向量中对象的元素

时间:2014-04-18 14:12:32

标签: c++ vector iterator

我有一个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;)吗?会有什么帮助吗?我实际上尝试但没有任何改变:我仍然无法访问每个对象的字段,即使迭代器返回指向它的指针。

1 个答案:

答案 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