【问题标题】:why do we put :: (scope resoulation operator) before iterator? [closed]为什么我们将 ::(范围解析运算符)放在迭代器之前? [关闭]
【发布时间】:2017-09-08 23:25:03
【问题描述】:

为什么我们将作用域解析运算符放在迭代器之前,而我们不在分数之前使用作用域解析运算符?

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

【问题讨论】:

标签: c++ c++11


【解决方案1】:

您专注于错误的部分。第一条语句定义了一个名为scores 的对象。第二条语句定义了一个名为pv 的对象。这两个名字前面都没有::

vector是命名空间std中定义的模板名称,所以称为std::vectoriterator 是在std::vector&lt;double&gt; 内部定义的类型的名称,因此称为std::vector&lt;double&gt;::iterator

【讨论】:

  • 补充:即std::vector::iteratorstd::vector 类型的特定迭代器。例如std::liststd::list::iterator 有一个特定的迭代器,等等。
  • 第一眼看不懂接受的ans。这个答案消除了我的疑惑。然后我再次阅读了接受的答案。现在我也可以理解接受的答案了。简单地说,vector&lt;double&gt;::iterator pvpv 声明为一个迭代器类型变量,它位于向量类模板中。
【解决方案2】:

std 是一个命名空间。
std::vectorstd 命名空间中的一个类模板,这使得std::vector&lt;double&gt; 成为一个类。
std::vector&lt;T&gt;::iteratorstd::vector&lt;T&gt; 下的一个嵌套类型。

如果要定义std::vector&lt;double&gt; 类型的对象,请使用:

std::vector<double> obj;

如果要定义std::vector&lt;double&gt;::iterator 类型的对象,请使用:

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

【讨论】:

  • Vector是std里面的类模板
  • @GuillaumeRacicot,谢谢 :) 听起来我需要休息一下电脑。
猜你喜欢
  • 2017-10-26
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 2011-02-23
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多