列表和向量的索引之间的区别

问题描述 投票:-3回答:2

在尝试使用向量实现的列表替换代码并且使用向量工作正常时,我看到错误c2227列表 - > set_as_output'必须指向class / struct / union / generic类型。我在下面提供了两种实现方式

class pin {
    friend class gate;
    pin(){}
    ~pin() {}
public:
   void set_as_input();
   void set_as_output();

}; // class pin


class gate {

protected:
    std::list<pin *> pins_;
    //std::vector<pin *> pins_;
    gate();
    ~gate();
    virtual bool validate_structural_semantics();
public:

}; // class gate

class and_gate : public gate
{
     bool validate_structural_semantics();
public:
}; // class and_gate

bool and_gate::validate_structural_semantics()
{
    if (pins_.size() < 3) return false;
    //pins_[0]->set_as_output();//using vectors and works fine
    pins_.begin ->set_as_output();//error is here with lists
    //for (size_t i = 1; i < pins_.size(); ++i)
    for (std::list<pin *>::iterator iter = pins_.begin();
        iter != pins_.end(); ++iter)
        //pins_[i]->set_as_input();
        (*iter)->set_as_input();
    return true;
}

我想了解实现中列表和向量之间的区别,以及我的代码中缺少的内容,只要列表涉及到解决问题。怎么解决?

c++ list vector
2个回答
0
投票

列表没有[]运算符,它们不是随机访问容器。

你可以使用auto iter = std :: advance(pins_.begin(),ndx);获取列表的第nx个元素的迭代器。


0
投票
pins_.begin ->set_as_output();

begin是会员职能;你必须打电话给它。就像你使用(*iter)->set_as_input()一样,你需要取消引用迭代器来获取指针:

(*pins_.begin())->set_as_output();
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.