如何将向量传递给函数?

时间:2011-03-16 23:37:52

标签: c++ function vector

我正在尝试将向量作为参数发送到函数,我无法弄清楚如何使其工作。尝试了一堆不同的方法,但他们都给出了不同的错误信息。 我只包含部分代码,因为只有这部分不起作用。 (向量“随机”填充了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);
}

7 个答案:

答案 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的成员。

您当前代码的问题

  1. binarySearch需要vector<int>*,但您传递vector<int>(在&之前遗漏random
  2. 在使用之前,您不会取消引用binarySearch内的指针(例如,random[mid]应为(*random)[mid]
  3. using namespace std;
  4. 之后您遗失了<include>
  5. 您分配给firstlast的值是错误的(应该是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,则代码不会出现任何错误