你可以做一個仿函數和std::for_each
:
struct F {
F(std::vector<std::pair<bool,int> > &b) : m_b(b){
}
void operator()(int x) {
m_b.push_back(std::make_pair(false, x));
}
std::vector<std::pair<bool,int> > &m_b;
};
std::for_each(a.begin(), a.end(), F(b));
雖然這可能被證明是更多的麻煩比它的價值。但至少它會是可重用的:)。
也許有些事情可以用boost::bind
完成。
2.編輯:我想你可能可以使用後退插入器和變換的綁定。是這樣的:
std::transform(a.begin(), a.end(), std::back_inserter(b), boost::bind(std::make_pair<bool, int>, false, _1));
我試圖與std::bind1st
,我認爲它應該有工作,但我只能得到它與boost::bind
成功。我會繼續努力......
編輯:這裏是一個非升壓解決方案:
std::transform(a.begin(), a.end(), std::back_inserter(b), std::bind1st(std::ptr_fun(std::make_pair<bool, int>), false));
4.編輯:這裏是一個C++ 11的解決方案(這是我現在的最喜歡的):
std::for_each(begin(a), end(a), [&b](int v) {
b.push_back(std::make_pair(false, v));
});
或更簡單:
for(int v : a) {
b.push_back(std::make_pair(false, v));
}
釷anks..I希望有比這更簡單的方法..還可以編輯答案,以便傳遞給構造函數的參數不是一個常量引用。我沒有使用boost,所以我使用標準的STL算法。 – Naveen 2009-02-09 05:34:08