簡體   English   中英

列表索引和向量索引之間的區別

[英]difference between indexing of lists and vectors

在嘗試使用用向量實現的列表替換代碼時,我看到錯誤 c2227 list of ->set_as_output' must point to class/struct/union/generic type。 我在下面提供了兩種實現

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;
}

我想了解列表和向量在實現中的區別,以及就列表解決問題而言,我的代碼中缺少什么。 如何解決?

列表沒有 [] 運算符,它們不是隨機訪問容器。

您可以使用 auto iter=std::advance(pins_.begin(), ndx); 獲取到列表中第 ndx 個元素的迭代器。

pins_.begin ->set_as_output();

begin是一個成員函數; 你必須調用它。 就像您對(*iter)->set_as_input()所做的一樣,您需要取消引用迭代器以獲取指針:

(*pins_.begin())->set_as_output();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM