- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
#include <iostream>
#include <functional>
#include <array>
#include <iterator>
template <class T>
class Filter : public std::iterator<
std::input_iterator_tag,
typename std::iterator_traits<T>::value_type,
typename std::iterator_traits<T>::difference_type,
typename std::iterator_traits<T>::pointer,
typename std::iterator_traits<T>::reference
>
{
private:
typedef typename std::iterator_traits<T>::value_type value_type;
std::function<bool(value_type)> m_predicate;
T m_begin, m_end;
value_type m_current;
public:
Filter(T t_begin, T t_end, std::function<bool(value_type)> t_predicate)
: m_begin(t_begin), m_end(t_end), m_predicate(t_predicate)
{
}
Filter<T>& begin()
{
return ++*this;
}
Filter<T>& end()
{
return *this;
}
value_type operator* ()
{
return m_current;
}
Filter<T>& operator++ ()
{
do {
m_current = *m_begin;
++m_begin;
} while (m_begin != m_end && !m_predicate(m_current));
return *this;
}
bool operator!= (Filter<T>& t_right)
{
return m_begin != t_right.m_end;
}
};
int main()
{
std::array<int, 10> arr{ {4, 35, 0, 23, 0, 0, 5} };
for (auto i : Filter<typename std::array<int,10>::iterator>(arr.begin(), arr.end(), [](int x){return x != 0;})) {
std::cout << i << " ";
}
}
gost 07.04.2019 19:45 # +1
BOKCEJIbHblu_nemyx 07.04.2019 19:49 # +2
PACTPOBblu_nemyx 07.04.2019 19:57 # +1
https://ideone.com/QIqznN
guest8 07.04.2019 22:52 # −999
BOKCEJIbHblu_nemyx 07.04.2019 20:08 # 0
6arPoBblu_nemyx 07.04.2019 20:30 # 0
BOKCEJIbHblu_nemyx 07.04.2019 20:51 # 0
В ихнем фориче, начиная с C++17, зачем-то сделали поддержку разных типов у begin и end, значит где-то они могут быть разные: Но я в крестах плохо шарю, могу ошибацца.
guest8 07.04.2019 21:15 # −999
guest8 07.04.2019 22:35 # −999
guest8 07.04.2019 22:58 # −999
guest8 07.04.2019 22:35 # −999
guest8 07.04.2019 22:59 # −999
guest8 07.04.2019 22:37 # −999
guest8 07.04.2019 22:38 # −999
guest8 07.04.2019 22:42 # −999
guest8 07.04.2019 22:42 # −999
guest8 07.04.2019 22:52 # −999
PACTPOBblu_nemyx 08.04.2019 02:19 # 0
bormand 08.04.2019 07:16 # 0
guest8 06.11.2019 01:09 # −999
guest8 06.11.2019 01:11 # −999
guest8 06.11.2019 01:13 # −999
koshka_Sviborga 06.11.2019 01:30 # 0
>> Питуз, если ты это читаешь, то вернись.
> На сосач не вернусь — противно. И раньше было противно из-за наплевательской по отношению к анонам политики модерации, но ввод платного увеличения лимита стал последней каплей, после которой я не оставил там ни одного поста.
guest8 06.11.2019 01:34 # −999
guest8 06.11.2019 01:37 # −999
guest8 06.11.2019 01:38 # −999
guest8 06.11.2019 01:47 # −999
koshka_Sviborga 06.11.2019 07:52 # 0
guest8 07.04.2019 22:43 # −999
guest8 07.04.2019 22:45 # −999
guest8 07.04.2019 22:49 # −999
guest8 07.04.2019 22:50 # −999
guest8 07.04.2019 22:50 # −999
guest8 07.04.2019 22:50 # −999
guest8 07.04.2019 22:50 # −999
guest8 07.04.2019 22:51 # −999
guest8 07.04.2019 22:51 # −999
guest8 07.04.2019 22:55 # −999
bormand 07.04.2019 22:59 # 0
guest8 07.04.2019 23:00 # −999
BOKCEJIbHblu_nemyx 08.04.2019 09:30 # 0
guest8 07.04.2019 23:01 # −999
OlegUP 08.04.2019 10:31 # 0
Как такие параметры шаблона называются? Нету нигде про них на cppreference.
BOKCEJIbHblu_nemyx 08.04.2019 10:41 # +1
eszett 08.04.2019 11:14 # 0
BOKCEJIbHblu_nemyx 08.04.2019 11:37 # 0
Elvenfighter 10.04.2019 21:07 # 0
https://wandbox.org/permlink/qjEkHE9W3Uajw3Yq
BOKCEJIbHblu_nemyx 11.04.2019 04:27 # 0
PACTPOBblu_nemyx 11.04.2019 05:27 # +2
типы выражений, в то время как динамический применим в более общем
случае.
Допустим мы оперируем сезонами года и имеем следующее определение месяцев:
Мы хотим иметь отдельные подтипы для каждого сезона. Для северного
полушария зима включает декабрь, январь и февраль. Поэтому нам нужен подтип, включающий значения Dec , Jan и Feb.
Мы не можем воспользоваться ограничением диапазона здесь, но можем
использовать статический предикат следующим образом:
Это гарантирует, что объекты типа Winter могут содержать только Dec , Jan и Feb. Подобная синтаксическая конструкция со словом with введена в Ада 2012 и называется аспектом.
Данный аспект проверяется при инициализации переменной по умолчанию, присваивании, преобразовании типа, передаче параметра и т. д. Если проверка не проходит, то возбуждается исключение Assertion_Error.
Если условие проверки не является статическим, то необходимо
использовать динамический предикат. Например:
Elvenfighter 11.04.2019 09:12 # +1
PACTPOBblu_nemyx 11.04.2019 15:12 # +1
Источник:
http://www.ada-ru.org/files/Safe_And_Secure.pdf
WoBuHucT 08.04.2019 17:18 # 0
PACTPOBblu_nemyx 11.04.2019 16:11 # +1
guest8 08.04.2019 17:20 # −999
PACTPOBblu_nemyx 11.04.2019 16:10 # +1
BOKCEJIbHblu_nemyx 08.04.2019 19:22 # 0
PACTPOBblu_nemyx 11.04.2019 15:54 # 0
gost 11.04.2019 16:59 # 0
Ruster 06.11.2019 00:44 # 0
guest8 06.11.2019 01:00 # −999
Elvenfighter 10.04.2019 21:21 # +2
Для такого придумали user-defined template deduction guides:
Тогда:
https://wandbox.org/permlink/bgDIOrsi8TWrwSxS
Elvenfighter 10.04.2019 21:24 # +1
cmepmop 11.04.2019 23:39 # 0