如何将向量传递给函数?
Posted
技术标签:
【中文标题】如何将向量传递给函数?【英文标题】:How to pass a vector to a function? 【发布时间】:2011-03-16 23:37:52 【问题描述】:我正在尝试将向量作为参数发送给函数,但我不知道如何使其工作。尝试了很多不同的方法,但它们都给出了不同的错误信息。 我只包含部分代码,因为只有这部分不起作用。 (向量“random”填充了随机但已排序的 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);
【问题讨论】:
不起作用是什么意思?请发布错误。 关于更新代码:参数 first 和 last 是来自向量的 值,而不是索引。您也永远不会设置要搜索的值 (search4)! 使用using namespace std;
是个坏主意。 Why?
【参考方案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>
(在 random
之前缺少 &
)
在使用binarySearch
内的指针之前不要取消引用它(例如,random[mid]
应该是(*random)[mid]
<include>
s 后面缺少using namespace std;
您分配给first
和last
的值是错误的(应该是0 和99 而不是random[0]
和random[99]
【讨论】:
“你分配给 first 和 last 的值是错误的(应该是 0 和 99 而不是 random[0] 和 random[99]” - 但我希望“first”是第一个值随机和“最后一个”是最后一个。我不希望它们成为值 0 和 99。 Joe:first
和 last
是索引,而不是值。你对它们代表什么感到困惑。
那我怎么给Last
这个向量的最后一个值呢?
哦,对不起,我现在看到我的错误了。谢谢!
@lecaruyer:简而言之,按值传递意味着向量的内容必须是可复制构造的,并且实际上会创建所有内容的副本。从性能和/或资源的角度来看,这在实践中的影响范围从可以忽略不计到非常有问题,甚至代码甚至无法编译。没有理由这样做,除非你真的想要第二份。【参考方案2】:
您必须将指针传递给向量,而不是向量本身。请注意此处的附加“&”:
found = binarySearch(first, last, search4, &random);
【讨论】:
【参考方案3】:你传递了一个指针*random
,但你使用它就像一个引用&random
指针(你所拥有的)说“这是内存中包含随机地址的地址”
引用说“这是随机的地址”
【讨论】:
【参考方案4】:每当您想将集合(或指针或引用)传递给函数时,问问自己是否不能传递几个迭代器。这样做可能会使您的功能更加通用(例如,在需要时/如果需要,可以轻松处理其他类型容器中的数据)。
当然,在这种情况下,没有什么意义,因为标准库已经有非常好的二进制搜索,但是当/如果你写一些不存在的东西时,能够在不同类型的容器上使用它通常是相当不错的方便。
【讨论】:
【参考方案5】:found = binarySearch(first, last, search4, &random);
注意&
。
【讨论】:
【参考方案6】:您将参数用作参考,但实际上它是一个指针。将vector<int>*
更改为vector<int>&
。而且你真的应该在使用之前将search4
设置为某个值。
【讨论】:
【参考方案7】:如果您使用 random
而不是 * random
您的代码不会出现任何错误
【讨论】:
以上是关于如何将向量传递给函数?的主要内容,如果未能解决你的问题,请参考以下文章