ベクトルで実装されたリストを使用してコードを置き換えようとしていて、ベクトルでうまくいきましたが、エラーが表示されます - > set_as_outputのc2227リストはクラス/構造体/ 。 私はリストが問題を解決するために懸念している限り、私のコードに欠けているものを実装してリストとベクトルの差をとは何かを学びたいと思ったリストとベクトルのインデックス付けの差
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;
}
下の両方の実装を提供しています。 それを解決するには?
のstd ::のリストは、オペレータ[]のようなものを経由してランダムアクセスをサポートしていません。これは、C++の教科書やC++のリファレンスで説明されています。 std :: listとstd :: vectorは一般に互換性がありません。 –
@ Neilのコメントに加えて、あなたの教科書がそれをはっきりとカバーしていない場合は、いつでも[ここ](http://en.cppreference.com/w/cpp/container/list)を参照して、標準クラスで利用できます。 – user0042