Убедитесь, что вы выполняете mvn exec:java
из того же каталога, где находится ваш pom.xml
с конфигурацией exec.
Это может привести к parse (eval (...))
, после чего вы открыты для этой критики:
R> library(fortunes)
R> fortune("parse")
If the answer is parse() you should usually rethink the question.
-- Thomas Lumley
R-help (February 2005)
R>
Так что ваши функции должны вызываться MyFunction.1
и т. Д.?
Вот почему я избегал в приведенном выше коде назначать результат make_xxx_iterator
переменной. Функция "авто" C ++ 0x будет здесь очень кстати.
Но все же итераторы C ++ не могут жить «в одиночку»: они должны приходить парами, чтобы быть полезными. Таким образом, даже с "auto" это все равно непросто:
auto begin = make_transform_iterator(construct<std::string>('*', _1),
make_filter_iterator(_1 > 2, vec.begin())
);
auto end = make_transform_iterator(construct<std::string>('*', _1),
make_filter_iterator(_1 > 2, vec.end())
);
Избегание использования лямбда делает вещи подробными, но управляемыми:
struct MakeStringOf{
MakeStringOf(char C) : m_C(C){}
char m_C;
std::string operator()(int i){return std::string(m_C, i);}
};
struct IsGreaterThan{
IsGreaterThan(int I) : m_I(I){}
int m_I;
bool operator()(int i){return i > m_I;}
};
typedef boost::filter_iterator<
IsGreaterThan,
std::vector<int>::iterator
> filtered;
typedef boost::transform_iterator<
MakeStringOf,
filtered
> filtered_and_transformed;
filtered_and_transformed begin(
MakeStringOf('*'),
filtered(IsGreaterThan(2), vec.begin())
);
filtered_and_transformed end(
MakeStringOf('*'),
filtered(IsGreaterThan(2), vec.end())
);
Библиотека Boost.RangeEx (пока еще не) является многообещающей в этом отношении, поскольку она позволяет объединить два итератора в один диапазон. Примерно так:
auto filtered_and_transformed = make_transform_range(
make_filter_range(vec, _1 > 2),
construct<std::string>('*', _1)
);
У Спуститься на веревке библиотеки есть многие https://, у github.com/abseil/abseil-cpp/blob/master/absl/algorithm/container.h есть много контейнерных функций: c_all_of
, c_any_of
, c_none_of
, c_find
, c_count
, c_count_if
, c_replace_copy
, c_unique_copy
, c_min_element
, c_max_element
, c_accumulate
См. эту ветку групп Google.
vector<int> numbers = {1, 2, 3, 4, 8, 5, 9 , 24, 19, 15, 12 }
auto query =
from(numbers).
where([](int i) { return i < 15 && i > 10}).
select(fields::full_object);
Я не смог найти ничего более или менее "официального" или широко распространенного, но вы можете попробовать связаться с автором исходное сообщение.
Я хотел бы порекомендовать вам библиотеку P-Stade.Oven . Это сильно усовершенствованная библиотека, работающая с диапазонами STL и имеющая множество LINQ-подобных функций, включая эквиваленты .Where, .Select .Skip .Take и .Concat.