2011-03-16 81 views
61

我想發送一個向量作爲參數的函數,我不知道如何使它工作。嘗試了一堆不同的方式,但他們都給出了不同的錯誤信息。 我只包含部分代碼,因爲只有這部分不起作用。 (矢量 「隨機」 填充有隨機的,但排序,值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); 
} 
+1

你說的不工作呢?請發佈錯誤。 – 2011-03-16 23:38:47

+1

關於更新代碼:參數第一個和最後一個是來自向量的**值**,而不是索引。你也從來沒有設置一個值來搜索(search4)! – 2011-03-17 10:32:52

+1

使用'using namespace std;'是個好主意。 [爲什麼?](http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice) – Tomask 2015-12-28 13:35:26

回答

101

這取決於你是否想通過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. 的值firstlast是錯誤的(應該在0到99,而不是random[0]random[99]
+0

「的值分配給第一和最後一個是錯誤的(應該是0, 99,而不是隨機的[0]和隨機[99]」 - 但我希望‘第一次’是在隨機的,第一個值‘最後’是最後一個,我不希望他們的值0和99。 – Joe 2011-03-17 00:36:50

+0

喬:'first'和'last'是* *的索引,而不是價值你是困惑,他們代表什麼 – Jon 2011-03-17 01:24:25

+0

那我怎麼給'Last'向量的最後一個值 – Joe 2011-03-17 10:02:30

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

2

你傳遞一個指針*random,但你使用它像一個參考&random

指針(你有什麼)說:「這是在內存中包含的隨機地址的地址」

參考文獻說「這是隨機地址」

0

您使用參數作爲參考,但實際上它是一個指針。將vector<int>*更改爲vector<int>&。在使用它之前,你應該真的設置search4

6

你必須指針傳遞到向量,而不是載體本身。請注意額外的「&」在這裏:

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

這是一個引用,而不是指針。 – Andrew 2017-02-11 21:00:59

0

如果使用random而不是* random你的代碼不給任何錯誤

2

任何時候你很想通過一個集合(或指針或引用一個)一個函數,問問自己是否不能傳遞幾個迭代器。很有可能這樣做會讓你的功能變得更加通用(例如,如果需要,可以使用另一種容器中的數據處理數據)。

在這種情況下,標準庫已經具有完美的二進制搜索功能,但是當/如果您編寫的東西還不在那裏,可以在不同類型的容器上使用它非常方便。