我在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;
}
答案 0 :(得分:3)
v
的类型是
vector<int>::iterator v
因此,如果您尝试
<< v << endl;
您尝试将iterator
写入输出流,而您想要int
。因此,要取消引用迭代器,可以使用*
运算符来获取迭代器中包含的基础对象
<< *v << endl
答案 1 :(得分:1)
vector<int>::iterator
基本上是指向int
的指针。
更正式地说,迭代器类型重载取消引用运算符以返回迭代器当前引用的元素。
这就是为什么如果要抽象值,需要编写<< *v
的原因。 (但如果v
位于vec.end()
,则不要这样做 - 取消引用的行为是未定义的。)