C++ 如何将向量传递给函数?

C++ 如何将向量传递给函数?,c++,function,vector,C++,Function,Vector,我试图将一个向量作为参数发送给一个函数,但我不知道如何使它工作。尝试了一系列不同的方法,但它们都给出了不同的错误消息。 我只包含部分代码,因为只有这部分不起作用。 (向量“random”由0到200之间的随机值填充,但已排序) 更新代码: #include <iostream> #include <ctime> #include <algorithm> #include <vector> using

我试图将一个向量作为参数发送给一个函数,但我不知道如何使它工作。尝试了一系列不同的方法,但它们都给出了不同的错误消息。 我只包含部分代码,因为只有这部分不起作用。 (向量“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);
}
#包括
#包括
#包括
#包括
使用名称空间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);