我有一個興趣班(稱之爲X)。
我有一個標準::清單< X * >(稱之爲L)。
我有一個函數(稱之爲F)。根據檢查列表中每個X的內部狀態的算法,F(L)返回L的一個子集(std :: list < X * >)。我要添加到我的應用程序std :: map < int,X * >(稱之爲M),我需要定義F(M)以與F(L)相同的方式運行 - 也就是說,F(M)必須返回std :: list < X * >,通過檢查映射中每個X的內部狀態來確定。std :: list和std :: map的常用算法?
作爲一個自我描述的懶惰程序員,我立即發現算法將[在邏輯上]相同,並且每個數據類型(std :: list和std :: map)都是可迭代的模板。我不想兩次保持相同的算法,但我不知道如何前進。
一個辦法是採取X *的從F(M)(也就是‘從鍵 - 值映射值’),扔進一個std ::名單< X * >,和將處理轉到F(std :: list < X * >),傳遞返回std ::列表< X * >;通過。我看不出這是唯一的方法。
我的問題:我如何在一個地方維護核心算法,但仍保留迭代序列或對聯合容器值的能力?
謝謝!
我喜歡這個,因爲函子真的很簡潔。和Mic和Anon一樣的想法。但我覺得最優雅。謝謝! – 2009-12-14 07:07:43
@Chris - 我同意,我不知道remove_copy_if的行爲就像我自己(奇怪的命名),一定會將它添加到我自己的阿森納:)。 – Mic 2009-12-14 18:57:46