为什么我们应该使用指针代码?

时间:2016-07-12 12:06:27

标签: c++ iterator

我在C ++教程中找到了以下代码。 在:

cout << "value of v = " << *v << endl;

您可以看到使用了*v。你能告诉我为什么我们不应该使用v而不是*v

#include "StdAfx.h"
#include <iostream>
#include <vector>
using namespace std;


int main()
{
   // create a vector to store int
   vector<int> vec; 
   int i;


   // access 5 values from the vector
   for(i = 0; i < 5; i++){
      cout << "value of vec [" << i << "] = " << vec[i] << endl;
   }

   // use iterator to access the values
   vector<int>::iterator v = vec.begin();
   while( v != vec.end()) {
      cout << "value of v = " << *v << endl;
      v++;
   }
   cin.get();
   cin.get();
   return 0;
}

2 个答案:

答案 0 :(得分:3)

v的类型是

vector<int>::iterator v

因此,如果您尝试

<< v << endl;

您尝试将iterator写入输出流,而您想要int。因此,要取消引用迭代器,可以使用*运算符来获取迭代器中包含的基础对象

<< *v << endl

答案 1 :(得分:1)

vector<int>::iterator 基本上是指向int的指针。

更正式地说,迭代器类型重载取消引用运算符以返回迭代器当前引用的元素。

这就是为什么如果要抽象值,需要编写<< *v的原因。 (但如果v位于vec.end(),则不要这样做 - 取消引用的行为是未定义的。)