2017-04-13 62 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