7template <
typename C> C slice(C
const& container,
size_t start)
9 auto b = container.begin();
10 auto e = container.end();
11 std::advance(b, start);
15template <
typename C> C slice(C
const& container,
size_t start,
size_t end)
17 auto b = container.begin();
18 auto e = container.begin();
19 std::advance(b, start);
24template <
typename C> C join(std::initializer_list<C> to_join)
27 for (
auto& e : to_join) {
28 result.insert(result.end(), e.begin(), e.end());
33inline std::string join(std::vector<std::string>
const& to_join, std::string
const& with =
",")
35 auto it = to_join.begin();
36 std::string result(*it++);
37 for (; it != to_join.end(); ++it) {
44template <
template <
typename,
typename...>
typename Cont,
typename InnerCont,
typename... Args>
45InnerCont flatten(Cont<InnerCont, Args...>
const& in)
49 result.insert(result.end(), e.begin(), e.end());
56template <
typename T> int64_t index_of(std::vector<T>
const& vec, T
const& item)
58 auto const& begin = vec.begin();
59 auto const& end = vec.end();
61 auto const& itr = std::find(begin, end, item);
63 return itr == end ? -1 : std::distance(begin, itr);