如何将一个向量传递给一个函数?

我试图发送一个向量作为参数的函数,我不知道如何使其工作。 尝试了一堆不同的方式,但他们都给出了不同的错误信息。 我只包含部分代码,因为只有这个部分不起作用。 (vector“随机”填充0到200之间的随机值,但sorting值)

更新了代码:

#include <iostream> #include <ctime> #include <algorithm> #include <vector> using namespace std; int binarySearch(int first, int last, int search4, vector<int>& random); int main() { vector<int> random(100); int search4, found; int first = 0; int last = 99; found = binarySearch(first, last, search4, random); system("pause"); return(0); } int binarySearch(int first, int last, int search4, vector<int>& random) { do { int mid = (first + last) / 2; if (search4 > random[mid]) first = mid + 1; else if (search4 < random[mid]) last = mid - 1; else return mid; } while (first <= last); return -(first + 1); } 

这取决于你想传递的vector作为参考还是作为一个指针(我忽略了按值传递它的选项,显然是不可取的)。

作为参考:

 int binarySearch(int first, int last, int search4, vector<int>& random); vector<int> random(100); // ... found = binarySearch(first, last, search4, random); 

作为一个指针:

 int binarySearch(int first, int last, int search4, vector<int>* random); vector<int> random(100); // ... found = binarySearch(first, last, search4, &random); 

binarySearch里面,你需要使用. 或者->地访问random的成员。

与您当前的代码问题

  1. binarySearch需要一个vector<int>* ,但是你传入一个vector<int> (缺less一个&之前的random
  2. 在使用binarySearch之前,不要对二进制search指针取消引用(例如, random[mid]应该是(*random)[mid]
  3. 你缺lessusing namespace std;<include>之后
  4. 您分配给firstlast是错误的(应该是0和99而不是random[0]random[99]

你必须将指针传递给向量,而不是向量本身。 请注意这里的附加'&':

 found = binarySearch(first, last, search4, &random); 

*random传递一个指针,但是你将它用作参考&random

指针(你有什么)说:“这是在内存中的地址,包含随机的地址”

参考文献说“这是随机的地址”

任何时候,当你试图将一个集合(或指针或引用)传递给一个函数时,问问自己是否不能传递几个迭代器。 有可能是这样做的,你会让你的函数更加通用(例如,如果需要的话,可以使用另一种types的容器中的数据来处理)。

在这种情况下,当然标准库已经具有非常好的二进制searchfunction,但是当/如果你写了一些不在那里的东西时,就可以在不同types的容器上使用它,这一点是非常方便的。

 found = binarySearch(first, last, search4, &random); 

注意&

你使用参数作为参考,但实际上它是一个指针。 将vector<int>*更改为vector<int>& 。 在使用之前,你应该真的把search4设置成某种东西。

如果你使用random而不是* random你的代码不会给出任何错误