なぜ私たちはイテレータの前にスコープ分解能演算子を入れますが、スコープ分解能演算子はスコアの前に使わないのですか?なぜイテレータの前に::(スコープのresoulation演算子)を入れますか?
std::vector<double> scores;
std::vector<double>::iterator pv;
なぜ私たちはイテレータの前にスコープ分解能演算子を入れますが、スコープ分解能演算子はスコアの前に使わないのですか?なぜイテレータの前に::(スコープのresoulation演算子)を入れますか?
std::vector<double> scores;
std::vector<double>::iterator pv;
std
は名前空間です。
std::vector
はstd
名前空間のクラステンプレートであり、std::vector<double>
をクラスにします。
std::vector<T>::iterator
は、std::vector<T>
のネストされたタイプです。
あなたが使用して、タイプstd::vector<double>
のオブジェクトを定義する場合:あなたが集中している
std::vector<double>::iterator iter;
Vectorはクラステンプレートですstd –
@GuillaumeRacicot、thanks :)私はちょっとコンピューターから休憩を取る必要があるように聞こえます。 –
:
std::vector<double> obj;
あなたがタイプstd::vector<double>::iterator
のオブジェクトを定義したい場合は、使用間違った部分に最初のステートメントは、scores
という名前のオブジェクトを定義します。 2番目のステートメントは、pv
という名前のオブジェクトを定義します。これらの名前のいずれも、その前に::
がありません。
vector
は、名前空間std
に定義されているテンプレートの名前なので、std::vector
と呼ばれます。 iterator
は、std::vector<double>
の内部で定義されているタイプの名前なので、std::vector<double>::iterator
と呼ばれます。
これに追加する:すなわち、 'std :: vector :: iterator'は' std :: vector'型のための特定のイテレータです。そして、例えば 'std :: list'は' std :: list :: iterator'などに特定のイテレータを持っています。 – JHBonarius
CとC++は異なる言語であることに注意してください。関連する言語タグ(この場合はC++)のみを使用してください。 – kaylum
そのうちの1つが解決を必要とするスコープ内にあるためです。 – GManNickG
[C++にスコープ解決演算子が必要なのはなぜですか?](http://stackoverflow.com/questions/9338217/why-does-c-need-the-scope-resolution-operator) –