1. Вы можете сделать функтор и 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
. Я буду продолжать пытаться ...
3. РЕДАКТИРОВАТЬ: вот решение без повышения:
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));
}