Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Serginio1, Вы писали:
S>>>>>> Я тебе показал реализацию которая компактнее реализации на C#. Ты же сам согласился выше.
EP>>>>>Какую конкретно реализацию?
S>>>> Хотошо. Напомню.https://rsdn.ru/forum/philosophy/6489023.1Автор: Serginio1
Дата: 01.07.16
S>>>>Или ты её не видел?
EP>>>А, так ты под реализацией имеешь в виду вызов готового алгоритма?
S>>То, что ты показал это реализация на
S>>http://ru.cppreference.com/w/cpp/algorithm/max_element
EP>Вообще-то нет, например у меня был ещё и selector.
У
S>> Если сюда добавить фильтр на null
EP>В том-то и дело что не нужно сюда добавлять фильтр на null — как и любой другой фильтр он реализуется ортогонально. Его добавили из-за проблем самого C#.
Дааааа? Приведу пример работы с базами данных. Там null это повсеместное явление при соединениях.
Это как раз проблемы С++.
EP>И я тебе уже это говорил в другой теме. Теперь ты и эту зафлудил
Я жду от тебя извинений за твои слова о том.
S>> даже в данном варианте на C# 30 строк. При этом используя foreach можно сокаратить до С++ кода. Но даже этот вариант меньше чем ты нашел где то сотни строк.
S>> Я кстати извинился за 2 раза. Жду от тебя извинений за несколько сотен строк.
EP>Ты нормальный? С чего мне перед тобой извинятся? Может я оклеветал тебя? Так покажи.
EP>Вариант на сотни строк до сих пор лежит у них в репозитории. Если думаешь что они как-то неправильно закодировали — иди в соответствующий под-форум.
Где я тебе показал на 30 строк. При этом вариант на C++ при сравнении на null будет аналогичным.
Я думаю о том, что ты не знаешь C#, но делаешь свои умозаключения на коде, в котором ничего не понимаешь. И то, что данный алгоритм можно решить так же как и на С++.
В библиотеке std тысячи строк. И что с того?
Для примера покажу вариант на давай рассмотрим вариант std без селектора и компаратора.
Можешь сам добавить и посчитаем, сколько строк. Еще раз при работе с БД null это нормальное явление при левых соединениях
template<class ForwardIt>
ForwardIt max_element(ForwardIt first, ForwardIt last)
{
if (first == last) {
return last;
}
ForwardIt largest = first;
++first;
for (; first != last; ++first) {
if (*largest < *first) {
largest = first;
}
}
return largest;
}
// Но вот их вариант но с компаратором, и селектором
using (var e = source.GetEnumerator())
{
if (!e.MoveNext())
throw NoElementsException();
item = e.Current;
value = selector(item);
while (e.MoveNext())
{
var x = selector(e.Current);
if (comparer.Compare(x, value) < 0)
{
value = x;
item = e.Current;
}
}
}
return item;
И где же это существенная алгоритмическая выразительность?
Мало того, по мне, так для многих арифметика указателей многим не понятна (я её прекрасно понимаю и она мне нравится)
Для обычного программиста код на C# просто понятнее
Другое дело, что для расширений нужно брать Linq и не парится с ручной работой с итераторами.