почему я получаю сообщение об ошибке: нет соответствия для оператора <<? - PullRequest
0 голосов
/ 14 октября 2018

Я новичок в программировании и изучении векторов в c ++ прямо сейчас. Я хочу отобразить адрес первого элемента вектора с использованием индекса и указателя. Программа 1 работает нормально, но яЯ получаю ошибку компиляции в программе 2 -

error: no match for ‘operator+’ (operand types are ‘std::vector<int>’ and ‘int’) cout<<*(num+1)<<endl;
Программа 1:

#include<iostream>
#include<vector> 
using namespace std;

int main()
 {
   vector<int> num;
   //Enter the numbers

   for(int i=0;i<10;i++)
     num.push_back(i);


   //Display address of first element using subscript
   cout<<&num[1]<<endl;


   return 0;
 }


Программа 2: Все коды одинаковы, кромеВместо индекса я хочу отобразить адрес с помощью указателя.

 //Display address of first element using pointer

   cout<<*(num+1)<<endl;

Я также попытался

cout<<(num.begin()+1)<<endl;

, но он показывает ту же ошибку.

1 Ответ

0 голосов
/ 14 октября 2018

a[b] эквивалентно *(a+b) только применительно к указателям.(И для массивов, поскольку в этом случае они автоматически преобразуются в указатели.)

std::vector не является указателем.Это класс (шаблон класса, если быть точным).Обычно [] не работает с классами, но std::vector перегружает оператор [], что означает, что он предоставляет специальную функцию-член, которая выполняется при использовании [].

Но std::vector не перегружает +, поэтому + нельзя применить к векторам.

Если бы вы написали свой собственный vector, вы могли бы легко перегрузить + вести себя так, как вы хотите.

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