2013-06-13 73 views
2

我正在學習C++,所以自然我一直在試圖弄清楚我能做什麼,不能做什麼。我寫了一小段代碼來處理lambda表達式和字符串,但它似乎給了我一些問題:S。for_each將字符串連接到一個向量中的所有字符串

我有兩個字符串存儲在向量中,一個是巧克力,另一個是香草。我想連接fudge到最後。我宣佈關聯的庫。一切都編譯並運行。但沒有連接:S任何幫助,將不勝感激。提前致謝。

void main() 
{ 

    vector<string> ramzy; 
    ramzy.push_back("chocolate"); 
    ramzy.push_back("vanilla"); 

    for_each(ramzy.begin(),ramzy.end(), 
     [](string word)->string{ 
      string i = word + " fudge"; 
      return (i); 
     }); 

    cout << ramzy[0] << endl << ramzy[1] << endl; 

} 

的輸出如下顯示:

chocolate 
vanilla 

希望的輸出是下面顯示:

Chocolate Fudge 
Vanilla Fudge 

回答

7

reference來自:

std::for_each 

將給定的函數對象f應用於取值 中的每個迭代器,範圍爲[first, last),依次排列。 如果InputIt是 可變迭代器,則f可以通過 解除引用的迭代器修改該範圍的元素。 如果f返回結果,結果將被忽略

所以,你有你的拉姆達變化到:

[](string& word) 
{ 
    word += " fudge"; 
} 
+0

它工作沒有for_each rewirte。我想我需要重新學習我的lambda:S但是,謝謝你的幫助。 – Ramzicle

+0

@Ramzicle *「我想我需要重新學習我的lambda」 - 不,只有標準算法的工作原理,與lambda無關。 –

4

相反的for_each的,使用變換您的需要。

std::transform(ramzy.begin(),ramzy.end(),ramzy.begin(),[](const std::string& str) 
      { 
       return str + " fudge"; 
      }); 
+0

我更喜歡'std :: transform'到'std :: for_each',但是最好不要把'const std :: string&'放到你的lambda中。 –

相關問題