首頁 >後端開發 >C++ >為什麼擦除-刪除習慣用法無法消除此向量中 .first 設定為 4 的對?

為什麼擦除-刪除習慣用法無法消除此向量中 .first 設定為 4 的對?

Linda Hamilton
Linda Hamilton原創
2024-11-10 11:08:02643瀏覽

Why Does the Erase-Remove Idiom Fail to Eliminate Pairs with .first Set to 4 in this Vector?

利用擦除刪除慣用法的力量進行向量居住

當嘗試從對元素向量中消除對時,擦除- remove_if慣用語作為一種多功能工具出現。然而,正確的實施對於確保預期結果至關重要。在這個問題中,我們探索對所提供的程式碼進行修改以實現預期的功能。

原始程式碼試圖使用erase-remove_if從向量中刪除.first設定為4的對。但是,由於擦除()方法中擦除範圍的指定不正確,程式碼未能實現此目的。

答案中提供的正確語法是:

stopPoints.erase(std::remove_if(stopPoints.begin(),
                                stopPoints.end(),
                                [](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }), 
                 stopPoints.end());

此修改擴展了擦除範圍,以包括與 lambda 函數中定義的謂詞匹配的整個元素段。這有效地刪除了所有匹配元素並保留了所需的向量組成,如更正後的輸出所示:

- 2, Up
- 6, Up

擦除刪除習慣用法依賴於remove_if和擦除函數的相互作用。 remove_if 識別不匹配的元素並將其移向向量的開頭,而擦除則刪除從remove_if 返回的迭代器開始的匹配元素的範圍。理解這個機制是有效運用這個習慣用法的關鍵。

以上是為什麼擦除-刪除習慣用法無法消除此向量中 .first 設定為 4 的對?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn