将向量传递给函数会产生错误.C++

aan*_*dis -3 c++ arrays vector

这是一个noob问题,对不起,我刚开始在c ++中使用向量.这是我正在努力的代码.

int main()
{
  //some code
  int n;
  cin>>n;
  vector <int> a(n+1,0);
  int first=find(&a,d);  //d has some value from the upper portion of the code
}
int find(vector <int>* a,int o)
{
    int b=o;
    while(a->b!=0)
        b=a->b;
    return b;
}
Run Code Online (Sandbox Code Playgroud)

Q1:为什么传递像find(a,d)这样的向量不像在数组中那样工作.

Q2:在find函数中,为什么我必须用"."访问向量元素.或" - >".不应该[b]工作吗?如果这是正确的方法那么为什么[b]在主函数中起作用?

问题3:代码有什么问题?当我编译时,我得到了错误

In function ‘int find(std::vector<int>*, int)’:
error: ‘class std::vector<int>’ has no member named ‘b’
Run Code Online (Sandbox Code Playgroud)

我理解错误,但是如何访问所需的元素?

提前致谢.:)

Mik*_*our 6

为什么传递像find(a,d)这样的向量不像在数组中那样工作.

数组通过"衰减"传递到指向第一个元素的指针; 所以他们通过引用有效地传递.

向量是直接的对象类型,除非声明函数采用引用,否则按值传递.按值获取的函数将获得它的单独副本.

您可以通过引用更改函数以获取向量:

void find(const std::vector<int> & a, int o);
                                 ^
Run Code Online (Sandbox Code Playgroud)

const是可选的,但如果函数不需要修改向量,这是一个非常好的主意.

在find函数中,为什么我必须使用"."访问向量元素.或" - >".

你没有.您可以size()像这样访问向量本身的类成员(例如).

不应该a[b]工作?

它会a是一个对象或参考.因为它是一个指针,你必须取消引用它,(*a)[b]

如果这是正确的方法那么为什么a[b]在主函数中工作?

在main函数中,'a'是一个对象,因此可以直接用作操作数.