#include <iostream>
#include <vector>
using namespace std;
int main ()
{
vector <int> qwerty;
qwerty.push_back(5);
vector <int>* p = &qwerty;
cout << p[0]; //error: no match for 'operator<<' in 'std::cout << * p'
}
我一般都不清楚如何使用带向量的指针,所以我对为什么这不起作用感到很困惑。在我看来,这应该打印5到屏幕。
答案 0 :(得分:10)
// either
cout << (*p)[0];
// or
cout << p->operator[](0);
答案 1 :(得分:2)
你的'cout'行相当于:
cout << qwerty;
因为p是指向qwerty的指针,然后用[0]取消引用。
qwerty是int类型的向量,无法直接打印。
如果查看http://www.cplusplus.com/reference/stl/vector/,可以看到[]重载有一个类方法,所以qwerty [0]会返回一个int。
所以cout << qwerty[0];
会起作用。
答案 2 :(得分:1)
为了更好地理解“p [0]”的含义,您可以尝试以下语句:
cout << p[0][0];
此语句将使您能够在控制台上打印出“5”。因为p [0]返回对象引用“qwerty”,那么因为向量对象支持索引操作,所以可以使用(p [0])[0]来获取向量中的第一个元素。