0
我想用std :: remove/remove_if和std:erase的組合來操作包含遞歸搜索根的文件名列表的<std::shared_ptr<CString> >
矢量。想象一下以下內容:隨機矢量處理
包含一個對話框:
- 兩個單選按鈕(保留和刪除)
- 一些複選框以圖像文件 擴展爲標籤(JPG,TIF,GIF等。)
- 一個按鈕做的動作
如果我選擇保留,我想保留的所有文件與檢查擴展和刪除一切或刪除directl如果我選擇刪除。舉個例子,我想我可以使用類似的東西來
void CPicsDlg::FilterFiles(void)
{
auto end = std::remove_if(g_vFiles.begin(), g_vFiles.end(), [&](std::shared_ptr<CString> const &strFile) { return strFile->Right(3) == "JPG" || strFile->Right(3) == "TIF" });
g_vFiles.erase(end, g_vFiles.end());
}
,如果我想保持或只是那些2個擴展刪除文件。但我永遠不會知道選中哪個複選框,所以我不知道如何構建自己的條件,並且我認爲如果我一次嘗試使用remove_if,那麼除了第一個文件之外,我想要保留或刪除的文件一個已經從矢量中刪除了!我不認爲可以使用remove,因爲它需要特定的值,顯然所有的文件和路徑都是唯一的。我可能可以迭代遍歷矢量,並保留或刪除每個符合我的條件的索引,但這似乎是過度殺傷。那麼我該如何去做到這一點呢?
我希望這是有道理的,如果其他地方已經有類似的東西,請在那裏指導我。 TIA
感謝。這正是我所需要的。如果我多使用XOR,我可能會自己拿出這個! :)如果複選框和擴展程序是以編程方式創建的,因爲總金額未知,是否可以調整它? – user638473