2009-08-31 56 views
0

我有這樣如何將2D地圖作爲參數傳遞給C++中的函數?

std::map< int, int> random[50]; 

地圖我怎樣才能通過這個地圖作爲參數傳遞給一個函數說執行()?

在此先感謝。

+0

是執行()一個現有的函數,或者你要寫一個? – Naveen 2009-08-31 05:21:02

+2

這不是一張地圖,而是一張50張地圖。這絕對是你'2D地圖'的意思嗎? – 2009-08-31 08:21:27

回答

3
void Perform(std::map< int, int > r[], size_t numElements); 

void Perform(std::map< int, int >* r, size_t numElements); 

然後,無論哪種方式,呼叫

Perform(random, 50); 

編輯:這也可以用於任何常量陣列尺寸如下調用。

Perform(random, sizeof(random)/sizeof (random[0])); 
+0

謝謝!它工作完美! – aneesh 2009-08-31 09:11:28

2

假設執行()有知道的大小隨意的一些方法,你可以將指針傳遞到隨機...例如:

執行(&隨機);

或者,您可以使用std ::地圖的一個std ::名單,並通過該列表的指針(甚至是複製)執行():

執行(隨機);或執行(&隨機);

取決於Perform如何被聲明,當然。

+1

你也可以傳遞一個對std :: map的std :: list的引用。 – jgottula 2009-08-31 05:14:32

+0

啊是的,這就是我與執行(&隨機) – 2009-08-31 05:15:20

+2

&隨機是一個指針,而不是參考。 – 2009-08-31 05:22:21

1

根據您是否可以Perform模板函數或沒有,你可以選擇

  • 的(常量)引用傳遞地圖:void Perform(const std::map<int,int> (& map)[50])
  • 傳遞一個指針和大小( C方式)
  • 創建模板,自動推導出陣列的大小

這是一個說明所有三個代碼片段。

#include <map> 

// number 50 hard coded: bad practice! 
void Perform(const std::map<int,int> (& maps) [50] ) {} 

// C-style array passing: pointer and size 
void Perform(const std::map<int,int>* p_maps, size_t numberofmaps){} 

// 'modern' C++: deduce the map size from the argument. 
template<size_t N> 
void TPerform(const std::map<int,int> (& maps)[N]) {} 



int main() { 
    std::map<int,int> m [ 50 ]; 
    Perform(m); 
    Perform(m, 50); 
    TPerform(m); 
} 
+0

我忽略了按值傳遞數組的版本,假設這會花費不必要的性能。 – xtofl 2009-08-31 08:09:19

+0

看起來像你包括作爲第二個選項「C式陣列傳球」。我不知道另一種方式來傳遞時實際複製它。 :) – 2009-08-31 12:38:13

+0

我的意思是真正的價值傳遞,像'Perform(地圖 arg [50])''。儘管這可能被翻譯爲指針傳遞。 – xtofl 2009-08-31 12:48:24

相關問題