2017-04-13 56 views
-5

爲什麼我們在迭代器之前放置範圍解析運算符,而在分數之前我們不使用範圍解析運算符?爲什麼我們在迭代器之前放入::(範圍resoulation操作符)?

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

請注意,C和C++是不同的語言 - 只使用相關的語言標記(本例中是C++)。 – kaylum

+3

因爲其中之一在需要解決的範圍內。 – 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>::iteratorstd::vector<T>下的嵌套類型。

如果要定義std::vector<double>類型的對象,請使用:

std::vector<double> obj; 

如果要定義std::vector<double>::iterator類型的對象,請使用:

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

Vector是類模板在std –

+0

@GuillaumeRacicot,謝謝:)聽起來像我需要從計算機休息一下。 –

0

你關注在錯誤的部分。第一條語句定義了一個名爲scores的對象。第二條語句定義了一個名爲pv的對象。這兩個名字都沒有在它前面有一個::

vector是名稱空間std中定義的模板的名稱,所以它被稱爲std::vectoriterator是在std::vector<double>中定義的類型的名稱,因此它被稱爲std::vector<double>::iterator

+0

添加到此:即'std :: vector :: iterator'是'std :: vector'類型的特定迭代器。例如,'std :: list'在'std :: list :: iterator'等等處有一個特定的迭代器。 – JHBonarius