Ответ 1
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. РЕДАКТИРОВАТЬ: Я думал, что вы сможете использовать bind с помощью вставки и преобразования. что-то вроде этого:
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. EDIT: здесь решение С++ 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));
}