2017-04-08 36 views
-1

嘿傢伙我有一個對象數組,我想知道最好的方式將它作爲參數傳遞給C++中的函數。什麼是傳遞對象數組作爲參數的最佳方式

Job jobs[5]; 

工作是我的類和作業[5]是5個對象

+0

這應該是任何文字,你是從領導很早就覆蓋。 – user4581301

+0

我們是否應該編輯它來閱讀「我怎樣才能[..]」而不是「[..]的最佳方式」? –

回答

0

展示瞭如何作業的數組傳遞給函數,用它做什麼簡單的例子:

class Job 
{ 
public: 
    int id; 
}; 

void SetJobIds(Job jobs[], int numJobs) 
{ 
    // do something useful with your array of jobs 
    for(int i=0; i<numJobs; ++i) 
    { 
     jobs[0].id = i; 
    } 
} 

int main() { 

    const int numJobs = 5; 

    Job jobs[numJobs]; 

    SetJobIds(jobs, numJobs); 

    return 0; 
} 
+0

儘管如此,習慣C++(讀標準庫)卻使用了過去末端指針。 –

0

的最佳方式的陣列到陣列傳遞到功能是利用std::vector

否則,您將不得不傳遞數組,元素的容量和數量。

std::vector包含這些屬性並處理動態內存。您仍然可以使用operator[]來訪問向量中的元素。

此外,更喜歡通過引用傳遞(所以不作副本)。
如果您不更改函數中的矢量,請傳遞常量引用。

0

通常的方法是通過一個指針到所述第一元件和經過所述陣列的端部的指針:

void my_function(Job const * begin, Job const * end); 
// const if you don't modify the array values 

這工作將與如何C++標準庫使用迭代器,並且更以上即可使用通用std::beginstd::end功能,從你的陣列獲得這兩個指針:

Job jobs[4]; 
my_function(std::begin(jobs), std::end(jobs)); 

但如何std::end知道數組的大小?顯然,它不能只接受指向數組元素的指針,因爲使用數組左值來調用它會觸發從數組到指針的轉換(jobs&(jobs[0])相同)。

好了,你也可以在C++數組的引用:

template<typename T, std::size_t Size> 
T * my_end(T (& array)[Size]) { 
//   ^  ^
//   reference to array 
// parentheses are strictly necessary: 
// T & array[Size] is an array of references (to T) 
    return array + Size; 
} 

最後說明一點:不要使用在現代C原料陣列(type name[size])的++是建議使用std::array<type, size> name(或std::vector如果大小未知/大)。

相關問題