另一種方法是將自己的產品推出,如Kerrek SB did in his answer至your question。
也就是說,理解並解決您使用std::set_difference()
時遇到的問題要好得多,而不是解決這個問題。
例如,被我碰到一個涉及含set_difference
行templates
長的編譯器錯誤,我會打破這種成一個小一系列獨立的,簡單的語句,這將使查明錯誤要容易得多:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <set>
#include <string>
int main()
{
typedef std::set<std::string> set_of_strings;
set_of_strings s1, s2, result;
s1.insert("1-2");
s1.insert("1-1");
s1.insert("3-4");
s2.insert("1-2");
s2.insert("1-3");
s2.insert("3-4");
// Temporary variables for debugging only
set_of_strings::iterator s1_begin = s1.begin();
set_of_strings::iterator s1_end = s1.end();
set_of_strings::iterator s2_begin = s2.begin();
set_of_strings::iterator s2_end = s2.end();
set_of_strings::iterator result_end = result.end();
std::insert_iterator<set_of_strings> result_inserter = std::inserter(result, result_end);
std::set_difference(s1_begin, s1_end,
s2_begin, s2_end,
result_inserter);
std::copy(result.begin(),
result.end(),
std::ostream_iterator<std::string>(std::cout, "\n"));
}
然後,編譯器會檢查每個set_difference
的五個參數是否是它所期望的類型,並且會讓我很快看到它們中的哪些導致了問題,因爲它們都是在單獨的語句中聲明的。
一旦我解決了這個問題,當然我會重構刪除不必要的變量。
另一種方法是...通過'set_difference'解決您遇到的問題。 – tenfour 2011-12-26 20:40:37