访问STL迭代器时,为什么需要使用作用域解析运算符而不是点运算符?这是因为迭代器是静态的,不属于特定的类实例。
vector<int>::iterator my_iterator;
而不是
vector<int> numbers;
numbers.iterator;
点运算符和箭头运算符(->
)用于访问特定实例的所有数据(成员变量、函数)。
作用域解析运算符用于访问特定类型的所有数据(静态成员变量、静态函数、类型),而不是实例。请注意,成员类型永远不会是特定于实例的,因此您将始终使用type::member_type
来访问它们。
a::b
表示类型名称;a.b
表示变量引用。在您的例子中,my_iterator
是变量的名称,vector<int>::iterator
则是它的类型。
vector<int>::iterator
是一种类型,因为要访问静态变量仍然使用 ::
。只有 vector<int>
是一种类型这个事实才重要。 - Andriy Tylychkovector<int>
的范围内查找 iterator
。 - Mike Seymour
vector<int>
是一种类型,而不是一个变量。 - Andriy Tylychkovector<int>
是一种类型,而在于vector<int>::iterator
是一种类型,而不是vector<int>
的数据成员,如果是后者,那么numbers.iterator
将是正确的。 - nikolasnumbers.iterator;
没有意义,因为一个容器可以使用尽可能多的迭代器。按照您的写法,一个容器只能有一个可能的迭代器。 - Stephane Rollandvector<int>::iterator
不是一个类型,那么就不能写成vector<int>::iterator my_iterator;
。 - Stephane Rollandnumbers.iterator;
,显然他不知道/理解iterator
是一个类型。我认为这是值得提及的。 - Stephane Rolland