如何将向量传递给函数?

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内部,需要使用.-&gt;对应访问random的成员。

您当前的代码存在问题

    binarySearch 需要 vector&lt;int&gt;*,但您传入 vector&lt;int&gt;(在 random 之前缺少 &amp;) 在使用binarySearch 内的指针之前不要取消引用它(例如,random[mid] 应该是(*random)[mid] &lt;include&gt;s 后面缺少using namespace std; 您分配给firstlast 的值是错误的(应该是0 和99 而不是random[0]random[99]

【讨论】:

“你分配给 first 和 last 的值是错误的(应该是 0 和 99 而不是 random[0] 和 random[99]” - 但我希望“first”是第一个值随机和“最后一个”是最后一个。我不希望它们成为值 0 和 99。 Joe: firstlast索引,而不是值。你对它们代表什么感到困惑。 那我怎么给Last这个向量的最后一个值呢? 哦,对不起,我现在看到我的错误了。谢谢! @lecaruyer:简而言之,按值传递意味着向量的内容必须是可复制构造的,并且实际上会创建所有内容的副本。从性能和/或资源的角度来看,这在实践中的影响范围从可以忽略不计到非常有问题,甚至代码甚至无法编译。没有理由这样做,除非你真的想要第二份。【参考方案2】:

您必须将指针传递给向量,而不是向量本身。请注意此处的附加“&”:

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

【讨论】:

【参考方案3】:

你传递了一个指针*random,但你使用它就像一个引用&amp;random

指针(你所拥有的)说“这是内存中包含随机地址的地址”

引用说“这是随机的地址”

【讨论】:

【参考方案4】:

每当您想将集合(或指针或引用)传递给函数时,问问自己是否不能传递几个迭代器。这样做可能会使您的功能更加通用(例如,在需要时/如果需要,可以轻松处理其他类型容器中的数据)。

当然,在这种情况下,没有什么意义,因为标准库已经有非常好的二进制搜索,但是当/如果你写一些不存在的东西时,能够在不同类型的容器上使用它通常是相当不错的方便。

【讨论】:

【参考方案5】:
found = binarySearch(first, last, search4, &random);

注意&amp;

【讨论】:

【参考方案6】:

您将参数用作参考,但实际上它是一个指针。将vector&lt;int&gt;* 更改为vector&lt;int&gt;&amp;。而且你真的应该在使用之前将search4 设置为某个值。

【讨论】:

【参考方案7】:

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

【讨论】:

以上是关于如何将向量传递给函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将向量传递给函数参数(我需要指针吗?)

如何将多个参数作为单个向量传递给函数?

如何通过将向量元素传递给函数来更改它们

如何在不使用向量的情况下将数组传递给函数?

Node.js:如何将向量传递给函数?

如何将向量中的值传递给带有多个参数的函数