Скажем, у меня есть вектор элементов и массив масок, и я хочу извлечь элементы из вектора с истинным соответствующим значением маски для разделения вектора. Есть ли способ использовать для этой цели std :: copy_if
? Проблема в том, что у меня есть только значение элемента внутри предиката, а не итератор для него, поэтому я не могу знать фактический индекс для адресации массива масок.
Я могу напрямую управлять адресами следующим образом:
vector<bool> mask;
vector<int> a, b;
copy_if(a.begin(), a.end(), b.begin(), [&] (int x) -> bool {
size_t index = &x - &a[0]; // Ugly...
return mask[index];
});
Однако я считаю это некрасивым решением. Есть лучшие идеи?
Обновление : Другое возможное решение - использовать внешний итератор по маске:
vector<bool> mask;
vector<int> a, b;
auto pMask = mask.begin();
copy_if(a.begin(), a.end(), b.begin(), [&] (int x) {
return *pMask++;
});
Однако это решение требует дополнительной переменной во внешнем пространстве имен, что по-прежнему нежелательно.