- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
template<class fwd, class Predicat>
fwd findLast(fwd one, fwd last, Predicat P)
{
if (one == last) return one;
fwd s = one;
fwd tt = ++s;
for ( ; s!=last; )
{
s = find_if(s, last, P);
if (s != last) { tt=++s; }
}
return tt;
}
Follow us!
std::forward_list в C++11.
тем не менее, даже для такого "популярного" forward_list функция написана безобразно
но я, пожалуй, поверю тому, кто запостил говнокод, и его описанию, что на самом деле должен был делать код - найти последний удовлетворяющий элемент в контейнере
кодер, наверное, хотел писать s++, это бы имело как раз больше смысла (кроме начала, конечно, там что ++s, что s++ бред)
идеальный код - использовать файд_иф и реверс_итератор везде, где это возможно, и конкретно для форвард_листа (ну или в той говноархитектуре, где хочется именно искать с начала в любом контейнере) пользоваться
вот ведь упёртый дед
>Код идеальный, ничего не изменишь без ухудшения.
2) Превратить О(n) в О(n^2) - это идеально.Вывод:
Код говно, автор мудак.
Это преждевременная оптимизация. То, к чему она привела можно увидеть на примере данного говнокода. Ещё и лишние тормоза получили из-за неумения писать код для односвязанного списка. Сначала нужно было std::list юзать, а когда закончил писать блок проги и слезно понадобилась оптимизация по объему памяти, то можно переходить на std::forward_list.
Преждевременная оптимизация root of all evil.
А для рекурсии + иммутабильность лисповых структур - обратный обход элементов вообще не нужен, тк их всегда можно вытащить из стека в обратном порядке.
нечего за меня писать
от не вложенной цепочки действий?
ты сегодня фейлишься больше обычного, сосредоточься!
Это видно хотя бы по тому, что итератор прогоняется вдоль цикла только один раз. Внутренний прогон учитывается во внешнем.
Да, забавно, искать последний элемент, ищя с начала.
http://www.youtube.com/watch?v=juFZpA7w2GE
все равно тут никто её не оценил.
а то я потом удивляюсь, откуда этот опущенец xxxGovno, который кроме хуя у себя рту ничего в жизни больше не видел, знает о ней.
на говне вырос
анимеговна кстати стало мало после коллективного буккакэ с его акком, может пора повторить с акком виртуала?
По треду слишком часто встречается ~6 против.
http://govnokod.ru/8441#comment118194
минусование началось отсюда:
>анимеговна кстати стало мало после коллективного буккакэ с его акком
>вижу, попка болит
>jabber
>вы оба идите на хуй
и этот тоже
Говнокод бы по обсуждали лучше.
ШindowsGovno
А так — экономия памяти (до двух раз), быстрее модификация (раза в два).
Вполне возможно, что в данной задаче этот самый последний элемент, но равный заданному, с большой вероятностью (это особенность конкретной задачи) лежит ближе к началу списка. Искать с конца в таком случае не имеет смысла. Поэтому можно применять односвязанный список. Если применять тот алгоритм, что работает за О(n) (а не тот, что в ГК за О(n^2)), то при учитывании данной особенности задачи (то условие, что последний равный элемент скорее всего лежит намного ближе к началу, чем к концу). То сложность данной задачи очень часто может вырождаться до сложности О(с) при c намного меньше n. Это будет намного эффективней применения традиционного std::list с реверсированными итераторами для данной конкретной задачи.
как это ты сможешь остановиться на 10-м элементе в контейнере из 100, считая что этот элемент - действительно последний в контейнере
ты же не проверял остальные 90