C++ 如何将向量传递给函数?
我试图将一个向量作为参数发送给一个函数,但我不知道如何使它工作。尝试了一系列不同的方法,但它们都给出了不同的错误消息。 我只包含部分代码,因为只有这部分不起作用。 (向量“random”由0到200之间的随机值填充,但已排序) 更新代码:C++ 如何将向量传递给函数?,c++,function,vector,C++,Function,Vector,我试图将一个向量作为参数发送给一个函数,但我不知道如何使它工作。尝试了一系列不同的方法,但它们都给出了不同的错误消息。 我只包含部分代码,因为只有这部分不起作用。 (向量“random”由0到200之间的随机值填充,但已排序) 更新代码: #include <iostream> #include <ctime> #include <algorithm> #include <vector> using
#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);
}
#包括
#包括
#包括
#包括
使用名称空间std;
int-binarySearch(int-first、int-last、int-search4、vector和random);
int main()
{
向量随机(100);
int search4,已找到;
int first=0;
int last=99;
found=binarySearch(第一个、最后一个、search4、随机);
系统(“暂停”);
返回(0);
}
int二进制搜索(int-first、int-last、int-search4、vector和random)
{
做
{
int mid=(第一个+最后一个)/2;
如果(搜索4>随机[mid])
第一个=中间+1;
else if(search4 请注意,您传递的是一个指针&
*random
,但您使用它就像引用&random
指针(您拥有的)显示“这是内存中包含随机变量地址的地址”
参考资料上写着“这是random的地址”您正在使用参数作为引用,但实际上它是一个指针。将vector*
更改为vector&
。在使用它之前,您应该将search4
设置为某个值。这取决于您想将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和random);
向量随机(100);
// ...
found=binarySearch(第一个、最后一个、search4、随机);
作为指针:
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*random);
向量随机(100);
// ...
found=binarySearch(first、last、search4和random);
在binarySearch
中,您需要使用
或->
相应地访问random
的成员
当前代码的问题
binarySearch
需要一个向量*
,但您传入一个向量
(在随机
之前缺少一个&
)
在使用binarySearch
之前,您不会取消对该指针的引用(例如,random[mid]
应该是(*random)[mid]
在
之后缺少使用命名空间std;
的
您分配给first
和last
的值错误(应该是0和99,而不是random[0]
和random[99]
必须将指针传递给向量,而不是向量本身。请注意此处的附加“&”:
found = binarySearch(first, last, search4, &random);
如果您使用random
而不是*random
您的代码在试图向函数传递集合(或指向集合的指针或引用)时不会出现任何错误,请扪心自问,您是否不能传递两个迭代器。这样做可能会使函数更通用(例如,如果需要,可以在另一种类型的容器中处理数据)
当然,在这种情况下,没有太多的意义,因为标准库已经有了非常好的二进制搜索,但是当/如果您编写了一些尚不存在的东西时,能够在不同类型的容器上使用它通常是非常方便的。什么是不起作用?请发布错误。在更新代码上:参数first和last是向量中的值,而不是索引。您也从未设置要搜索的值(search4)!使用命名空间std;
是个坏主意。“您指定给first和last的值是错误的(应该是0和99,而不是random[0]和random[99]”-但我希望“first”是random和“last”中的第一个值是最后一个。我不想让它们成为值0和99。乔:first
和last
是索引,而不是值。你对它们代表什么感到困惑。那么我如何给出向量的last
最后一个值呢?哦,对不起,我现在看到我的错误了。谢谢!@lecaruyer:简单地说,通过值传递意味着向量的内容必须是可复制的,所有内容的副本实际上都会被创建。这在实践中的影响可能是微不足道的,从性能和/或资源的角度来看可能是非常有问题的,甚至是不可编译的代码。没有理由这样做,除非你真的想要第二份内容。
found = binarySearch(first, last, search4, &random);