Матвеев Ян Альбертович
20.12.2021 18:20 (16 д. 18:21)
[5924157]
#include <vector>
template <typename Value, typename Size>
auto initialize_vector(Value n, Size s) {
return std::vector<Value>(s, n);
}
template <typename Value, typename Size, typename... Args>
auto initialize_vector(Value n, Size s, Args... dims) {
auto vec = initialize_vector(n, dims...);
return std::vector<Args>(s, vec);
}
template <typename T, typename Iter>
Iter find(const T& t, Iter st, Iter en, std::forward_iterator_tag) {
Iter i;
for (i = st; i != en; i++) {
if (i == t) return i;
}
return en;
}
template <typename T, typename Iter>
Iter find(const T& t, Iter st, Iter en, std::bidirectional_iterator_tag) {
Iter i;
for (i = st; i != en; i++) {
if (i == t) return i;
}
return en;
}
template <typename T, typename Iter>
Iter find(const T& t, Iter st, Iter en, std::random_access_iterator_tag) {
Iter res = en;
en--;
while (st < en) {
Iter mid = st + (en - st) / 2;
if (mid < t) {
st = mid + 1;
} else {
en = mid;
}
}
if (st == t) {
res = st;
}
return res;
}
template <typename T, typename Iter>
Iter Find(const T& t, Iter st, Iter en) {
return find(t, st, en,
typename std::iterator_traits<Iter>::iterator_category());
}