为什么我会出错:没有匹配'operator <<!-?

时间:2018-10-14 10:17:54

标签: c++ c++11 pointers vector

我现在是使用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 :(得分:2)

a[b]仅在应用于指针时才等效于*(a+b)。 (以及数组,因为在这种情况下,它们会自动转换为指针。)

std::vector不是指针。这是一个类(准确地说是一个类模板)。通常[]在类上不起作用,但是std::vector 重载运算符[],这意味着它提供了一个特殊的成员函数,该函数在{{1} }。

但是[]不会过载std::vector,因此+不能应用于向量。

如果您要编写自己的+,则可以很容易地使vector重载以使其表现出所需的行为。