指向矢量

时间:2011-01-17 02:07:42

标签: c++ pointers vector

#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到屏幕。

3 个答案:

答案 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]来获取向量中的第一个元素。