我正在尝试将向量作为参数发送到函数,我无法弄清楚如何使其工作。尝试了一堆不同的方法,但他们都给出了不同的错误信息。 我只包含部分代码,因为只有这部分不起作用。 (向量“随机”填充了0到200之间的随机但排序的值)
更新了代码:
#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);
}
答案 0 :(得分:120)
这取决于你是想传递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>
(在&
之前遗漏random
)binarySearch
内的指针(例如,random[mid]
应为(*random)[mid]
using namespace std;
<include>
first
和last
的值是错误的(应该是0和99而不是random[0]
和random[99]
答案 1 :(得分:7)
你必须将指针传递给向量,而不是向量本身。请注意附加的'&amp;'这里:
found = binarySearch(first, last, search4, &random);
答案 2 :(得分:2)
你传递了指针*random
,但你正在使用它像引用&random
指针(你有什么)说“这是内存中包含随机地址的地址”
参考文献说“这是随机的地址”
答案 3 :(得分:2)
任何时候你都试图将一个集合(或指针或引用)传递给一个函数,问问自己是否不能通过几个迭代器。有可能通过这样做,你将使你的功能更加通用(例如,当需要时,使得在另一种类型的容器中处理数据变得微不足道。)
在这种情况下,当然,没有太多意义,因为标准库已经具有完美的二进制搜索功能,但是当你/如果你写的东西还没有,那么能够在不同类型的容器上使用它通常是相当的方便。
答案 4 :(得分:1)
found = binarySearch(first, last, search4, &random);
注意&
。
答案 5 :(得分:0)
您正在使用参数作为参考,但实际上它是一个指针。将vector<int>*
更改为vector<int>&
。在使用它之前,你应该真正设置search4
。
答案 6 :(得分:0)
如果您使用random
代替* random
,则代码不会出现任何错误