2017-04-13 2 views
-5

なぜ私たちはイテレータの前にスコープ分解能演算子を入れますが、スコープ分解能演算子はスコアの前に使わないのですか?なぜイテレータの前に::(スコープのresoulation演算子)を入れますか?

std::vector<double> scores; 
std::vector<double>::iterator pv; 
+0

CとC++は異なる言語であることに注意してください。関連する言語タグ(この場合はC++)のみを使用してください。 – kaylum

+3

そのうちの1つが解決を必要とするスコープ内にあるためです。 – GManNickG

+1

[C++にスコープ解決演算子が必要なのはなぜですか?](http://stackoverflow.com/questions/9338217/why-does-c-need-the-scope-resolution-operator) –

答えて

1

stdは名前空間です。
std::vectorstd名前空間のクラステンプレートであり、std::vector<double>をクラスにします。
std::vector<T>::iteratorは、std::vector<T>のネストされたタイプです。

あなたが使用して、タイプstd::vector<double>のオブジェクトを定義する場合:あなたが集中している

std::vector<double>::iterator iter; 
+0

Vectorはクラステンプレートですstd –

+0

@GuillaumeRacicot、thanks :)私はちょっとコンピューターから休憩を取る必要があるように聞こえます。 –

0

std::vector<double> obj; 

あなたがタイプstd::vector<double>::iteratorのオブジェクトを定義したい場合は、使用間違った部分に最初のステートメントは、scoresという名前のオブジェクトを定義します。 2番目のステートメントは、pvという名前のオブジェクトを定義します。これらの名前のいずれも、その前に::がありません。

vectorは、名前空間stdに定義されているテンプレートの名前なので、std::vectorと呼ばれます。 iteratorは、std::vector<double>の内部で定義されているタイプの名前なので、std::vector<double>::iteratorと呼ばれます。

+0

これに追加する:すなわち、 'std :: vector :: iterator'は' std :: vector'型のための特定のイテレータです。そして、例えば 'std :: list'は' std :: list :: iterator'などに特定のイテレータを持っています。 – JHBonarius

関連する問題