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

时间:2013-12-05 14:18:26

标签: c++ arrays vector

这是一个菜鸟问题,对不起,我刚开始在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;
}

Q1:为什么传递像find(a,d)这样的矢量就像在数组中那样工作。?

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

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

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

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

提前致谢。 :)

3 个答案:

答案 0 :(得分:6)

  

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

通过“衰减”将数组传递给指向第一个元素的指针;所以他们通过引用有效地传递。

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

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

void find(const std::vector<int> & a, int o);
                                 ^

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

  

在find函数中,为什么我必须使用“。”访问向量元素。或“ - &gt;”。

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

  

a[b]不应该有用吗?

如果a是对象或引用,那就是它。由于它是指针,因此您必须取消引用它(*a)[b]

  

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

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

答案 1 :(得分:0)

你应该学习矢量,模板,c ++方法来做到这一点。

看看:http://www.cplusplus.com/reference/vector/vector/

Q1:为什么传递像find(a,d)这样的矢量就像在数组中那样工作。?

因为它不是一个数组,它是一个对象,所以你可以将它作为副本传递而不是引用它,如果你改变它,你只需将它作为参考传递。

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

[position]返回元素 a-&gt; b不起作用,你不能将b作为元素访问 使用a-> at(位置)访问向量中的每个元素

示例(您也可以使用迭代器)

for(int x=0; x<a->size();x++)
  cout << a->at(x);

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

上一个问题回答了这个问题。 你没有b元素,A是一个包含元素的向量。 如果你想在位置B处获得元素,请执行a - >;(b)。 如果你想找到使用

for(int x=0; x<a->size();x++)
  if(a->at(x) == b) return x; //returns the position

答案 2 :(得分:0)

你说的是:

int b = o;
while(a->b!=0)
    b=a->b;
return b;

当你的意思是:

for(vector<int>::const_interator i = a.begin(); i != a.end(); ++i)
    if (*a == o)
        return a.end() - i;
return a.size();