Указывать на векторы - PullRequest
       5

Указывать на векторы

0 голосов
/ 17 января 2011
#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 ]

10 голосов
/ 17 января 2011
// either
cout << (*p)[0];
// or
cout << p->operator[](0);
2 голосов
/ 17 января 2011

Ваша строка 'cout' эквивалентна:

cout << qwerty;

потому что p это указатель на qwerty, который вы затем разыменовываете с помощью [0].

qwerty - это вектор типа int, который не может быть напечатан напрямую.

Если вы посмотрите на http://www.cplusplus.com/reference/stl/vector/, вы увидите, что существует метод класса для перегрузки [], поэтому qwerty [0] вернет int.

Так что cout << qwerty[0]; будет работать.

1 голос
/ 17 января 2011

Чтобы лучше понять, что означает «p [0]», вы можете попробовать следующее утверждение:

cout << p[0][0]; 

это утверждение позволит вам распечатать "5" на консоли. Поскольку p [0] возвращает ссылку на объект "qwerty", то, поскольку векторный объект поддерживает операцию индекса, вы можете использовать (p [0]) [0], чтобы получить первый элемент в векторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...