2013-08-05 121 views
1

我有問題將char數組按值傳遞給priority_queue。我想將一個唯一的值傳遞給構造函數,但我只能將優先級隊列中的類型分配給char*。這會產生問題,因爲傳遞的值會隨着算法中的每次迭代而改變,然後優先級隊列中的所有值(因爲每個元素都是指向任務的指針)。這裏是一個代碼示例:通過值傳遞char數組

char task[100]; 
char priority; 
pair<int, char*> temp; 
priority_queue< int, vector<pair<int, char*>>, compare> queue; 
printf("Define a priority and a task to be done (exit by pressing CTRL-D):\n\n"); 
do { 
    priority=getchar(); 
    if(isdigit(priority)){ 
     scanf("%s", task); 
     temp=make_pair(atoi(&priority), task); //I want to pass by value here not by reference, is there any solution to this? 
     queue.push(temp); 
     printf("%i %s\n", temp.first, temp.second); 
    } 
} while(priority != EOF); 

有沒有什麼辦法可以爲優先級隊列的每個元素分配一個唯一的字符串?

+3

C++解決方案:按價值傳遞字符串或矢量。 C解決方案:struct foo {char task [100]; };'並通過值傳遞該結構。 – 2013-08-05 13:31:50

+3

只需使用'make_pair(...,std :: string(task))'並相應地更改相關類型。 – Jon

+0

好的。我明白了,這是解決問題的辦法。在這種情況下,僅使用char []不是一個選項? – user1319951

回答

2

由於對問題的評論建議您可以將char [100]int換成新的類型(因爲pair<>給出了較差的抽象)。 另一種選擇是使用std::string,std::vector<char>,std::array<char, 100>而不是char [100]。

PS:對atoi(&priority)的調用可能會下降,因爲atoi需要以空字符結尾的C字符串,而不是指向單個字符的指針。

0

我想你可以使用類似std::array<char,100>的東西,但是你當前的矢量類型需要一個動態分配的字符串。

你想強制你的向量的每個元素超過100個字節,然而長的字符串?