2011-09-04 38 views
1

在將C映射imap轉換爲char * array []和C中的整數數組方面,有更好的性能方法嗎?將C++映射轉換爲C數組 - 性能

map<string, int> imap; // Code below will build the imap 
.... 
.... 
.... 

char** carr; 
int* iarr; 

*carr = (char**)malloc(sizeof(char*)*imap.size()); 
*iarr = (int*)malloc(sizeof(int)*imap.size()); 

index = -1; 
for(iter = imap.begin(); iter != imap.end(); ++iter) 
{ 
    (*carr)[++index] = strdup(iter->first.c_str()); 
    (*iarr)[index] = iter->second; 
} 

-Kartlee

+0

您正在解除引用太多。作業應該是carr [++ index] =「...」和iarr [index] =「...」。而且,大多數人在使用後開始使用零和增量索引。 malloc行的左值也是錯誤的。 – wildplasser

+0

你假設你可以很容易地構建出比圖書館作者寫得更好的東西。我們爲什麼要相信? –

回答

2

沒有,沒有。只是美化你的代碼。我想一個好的編譯器會優化所有的異常。

我會避免調用c_str(),如果可能的話,我只是創建STL字符串數組,因爲那是在腳本中耗盡大部分時間的東西。

另請注意:我自己在演奏之前放置了美觀易懂的代碼。整理你的代碼,擺脫那些醜陋的惡意軟件。 C++支持NEW操作符。

+0

我不能使用stl字符串,因爲這需要在C中支持。根據您的評論,使用new運算符是可以的。無論如何,感謝這些信息,它不能以更好的方式和成語來完成。 – Kartlee