- 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;
}
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