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. EDIT: вот не-наддув решение:
std::transform(a.begin(), a.end(), std::back_inserter(b), std::bind1st(std::ptr_fun(std::make_pair<bool, int>), false));
4. EDIT: здесь раствор 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));
}
Th anks .. Я надеялся, что будет проще, чем делать это. Также вы можете отредактировать ответ, чтобы параметр, переданный конструктору, не был ссылкой на константу. Я не использую boost, поэтому я живу со стандартными алгоритмами STL. – Naveen
Хороший вызов const, сила привычки по умолчанию для const :) –
@patryk, для числа 4 - C++ 11 по-прежнему требует как позиции, так и значения в качестве аргумента для 'vector :: insert', не так ли ? (см., например, [здесь] (http://www.cplusplus.com/reference/vector/vector/insert/).) Вы имели в виду 'push_back()'? – phlummox