#include <cassert>
#include <algorithm>
#include <iostream>
#include <vector>

void filter(std::vector<int>& v, const std::vector<bool>& b)
{
    assert(v.size() == b.size());
    auto it = b.begin();
    v.erase(std::remove_if(v.begin(), v.end(), [&](int) { return *it++; }), v.end());
}



int main()
{
    std::vector<int> v = {0, 1, 2, 3, 4, 5, 6};
    std::vector<bool> b = {true, true, false, false, true, false, true};
    
    filter(v, b);
    for (auto i : v) {
        std::cout << " " << i;
    }
    
}
