Создайте объект функтора, который вы можете инициализировать значением совпадения, и итерацию по списку, используя std::for_each
.Так, например:
vector<int> values;
//fill your vector with values;
struct match_functor
{
vector<int> value_array;
int match_value;
match_functor(int value): match_value(value) {}
void operator() (int input_value)
{
if(match_value == input_value)
value_array.push_back(input_value);
}
};
match_functor matches(1);
std::for_each(values.begin(), values.end(), matches);
Теперь к вашему массиву значений результатов можно получить доступ, используя matches.value_array[INDEX]
.
В качестве альтернативы, если вы просто хотите получить признаки исходного вектора, скореечем действительные значения, то вы можете сделать что-то вроде этого для вашего объекта функтора:
struct match_functor
{
vector<int> index_array;
int match_value;
int index;
match_functor(int value): match_value(value), index(0) {}
void operator() (int input_value)
{
if(match_value == input_value)
index_array.push_back(index);
index++;
}
};
match_functor matches(1);
matches = std::for_each(values.begin(), values.end(), matches);
Теперь matches.index_array[INDEX]
будет содержать признаки вектора orignal, которые соответствуют значению 1
, а не фактическомузначения из исходного вектора.