如何将一个向量传递给一个函数?
我试图发送一个向量作为参数的函数,我不知道如何使其工作。 尝试了一堆不同的方式,但他们都给出了不同的错误信息。 我只包含部分代码,因为只有这个部分不起作用。 (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
的成员。
与您当前的代码问题
-
binarySearch
需要一个vector<int>*
,但是你传入一个vector<int>
(缺less一个&
之前的random
) - 在使用
binarySearch
之前,不要对二进制search指针取消引用(例如,random[mid]
应该是(*random)[mid]
- 你缺less
using namespace std;
在<include>
之后 - 您分配给
first
和last
是错误的(应该是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
你的代码不会给出任何错误