LINUX.ORG.RU

foreach в c++

 ,


1

4

Как я ждал этого!!!

Начал писать на php и использовать тамошний foreach. Удобная конструкция скажу я вам; заметил, что обычным for вообще почти перестал пользоваться. На C++ же делал по-старинке/по-привычке: for (int i=0;i<N;i++) . Это раз. Кроме того, в C++ очень напрягала работа с STL/итераторами: монструозные конструкции выходят.

Про развитие C++ читал, но никак не доходили руки. И вот решил попробовать:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
  vector<uint> v;

  v.push_back(3);
  v.push_back(5);
  v.push_back(6);

  // Вот здесь!!!
  for(auto i:v)
    cout << i << " ";

  cout << "\n";

  return 0;
}
$ g++ -std=c++11 delme3.cpp -o delme3 && ./delme3
3 5 6
Да здравствует более читабельный код!!!

Если кто еще не пробовал - рекомендую!

★★★★★

Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от BlackHawk

Не можешь реализовывать алгоритмы — так и скажи. Переписать код с одного языка на другой любая обезьянка справится.

Алгоритм чего? Очередной балабол.

Тратить на тебя время я не собираюсь. Ты сказал, что перебор чего угодно пишется не сложнее, чем от 1 до 5, не я. И кто тут слился?

С этого и надо ничнать. Ну дак чего мне надо сделать перебор? Ты сказал?

Ты понимаешь, я не буду говорить кто ты, тут Си - тут нет пишут на твоём анскильном обощении. Тут перебирают конкретные битики, а ты не можешь даже привисти пример того, что мне надо перебирать, оправдывая этот какой-то терминологий, которую по твоёму, я не буду говорить какому, выводу я должен знать.

procoder99
()
Ответ на: комментарий от cdshines

Дак пусть эти люди со мной не спорят и не лезут. Они же орут, что они пилят не хуже, что являешься ересью. Дак пусть не орут, я буду относится к ним как к деткам с кубиками.

procoder99
()
Ответ на: комментарий от comp00

Ты перешол на личность после тотальной лужи - я это люблю, только не пытайся - не выйдет. Без разницы кто я, и какое у меня ЧСВ. Тут либо прав, либо нет.

procoder99
()
Ответ на: комментарий от comp00

Code Conventions писались для 95% обезъянок, ты можешь ими тут не бахвалица. Реально, твой парсер настолько слаб, что ты не видишь символ ';', а символ '}' ты видешь лучше, так получается?

Если потребуется дописать - юзай запятую, либо добавлять скобки. Это не сложнее. Неосиляторский фактор, если ты не можешь прочитать код.

Может мне каждое предложение тебе с новой строки писать, а то тебе же не ясно где оно кончается?

procoder99
()
Ответ на: комментарий от procoder99

Ну дак чего мне надо сделать перебор? Ты сказал?

Вообще-то да. Раз уж тебя забанили в гугле, я напишу задачу:

Вот две числовые последовательности:
1 2 3 4 5 6 7 8 9 0
1 1 3 6 4 10 5 6 0

Их НОП — 1 3 4 5 6 0
Очевидно, таких может быть несколько(у 1 2 3 2 1 и 2 3 1 2 НОП 2 3 1 и 2 3 2).

На вход программе поступают две строки с числовыми последовательностями. Выведи на экран длину, количество и сами наибольшие общие подпоследовательности за O(mn) времени.

Прочитать, как это сделать, можно вот тут, если, конечно, осилишь.

BlackHawk
()

Теперь совместимость на уровне кода с языком С окончательно исчезла. Может быть, теперь местные аналитики перестанут писать C/C++, как будто это один язык.

Deleted
()
Ответ на: комментарий от BlackHawk

Ещё один батл - интересно.

Я ищу однаковые значения в 2-х твоих последовательностях, начиная правее последней?

Выведи на экран длину, количество и сами наибольшие общие подпоследовательности за O(mn) времени.

Какое O, как меня веселят эти детки, которые отслись во временах 4битного фуфла.

И да, что такое m.

Если в рамках х86, то не смеши мои тапки своей детской О-нотаций. Пиши конкретно камень, длинну, выкати файлец-бенчмарк - и за скажи за какакое время твой х86 это фигачит. Я пойму примерное время на моём камне и запилю быстрее.

Ах ну и да, это далеко не перебор.

procoder99
()
Ответ на: комментарий от Kroz

А теперь перед этим единичку прибавь к каждому (:

puts v.map{|i|i+1}.join(' ')
geekless ★★
()
Ответ на: комментарий от procoder99

А ты придумай мне задачу небанальную

Ну, напиши хоть «пацанскую сорторовку на сложениях». Такую, чтобы qsort и heapsort пыль глотали.

я уже почти допилил почти идеально решение для моего батла с белкой

Когда опубликуешь «совсем идеальное» решение, будет тема для разговора, а сейчас ее тупо нет.

tailgunner ★★★★★
()
Ответ на: комментарий от Kroz

http://habrahabr.ru/post/182428/
Аргументы против этого есть?

Да это практически такой же агрессивный норкоман писал как и 99-й пони, только с другой стороны и грамотнее.

Ему там же в каментах рассказали что в С тоже можно генерировать функции не руками, может получиться еще проще чем этот трешак с шаблонами, но ему это не интересно, у него цель доказать что С++ круче.

Если ненадолго включить моск (потом можно сразу выключить) и подумать, то это удивительно. Вот у нас есть бурно развивающийся 30 лет С++ и С, который больше 40 лет стагнирует. И их до сих пор сравнивают друг с другом. Причем, они идут вполне себе в одной категории, какого-то разгромного отрыва С++ не видно, хотя он задумывался именно как замена С.

Почему так происходит - непонятно. Нет, похоже, у Страуструпа и у комитета искры. С такой медиа- и финансовой поддержкой добиться такого результата - это надо постараться

anonymous
()

Да здравствует более читабельный код!!!

C++

вы выбрали не тот язык.

можно сколько угодно развивать стандарт, разбавлять тот бардак, что в нем творится, сахаром, но язык все равно останется малоюзабельным.

MyTrooName ★★★★★
()
Ответ на: комментарий от tailgunner

facepalm.jpg

Стагнация (фр. stagnation, от лат. stagno — делаю неподвижным, останавливаю; лат. stagnum — стоячая вода)

А расскажите, как сильно изменился С за последние 40 лет?

anonymous
()
Ответ на: комментарий от anonymous

Стагнация (фр. stagnation, от лат. stagno

Отсылки к латыни - это так солидно. Сразу понимаешь, что оппонент - не какая-то там школота.

А расскажите, как сильно изменился С за последние 40 лет?

А ты погрепай ЛОР - тут давали ссылки на исходники Unix. Там как раз Си 40-летней давности - сравни, если интересно. Си, конечно, не быстро развивается, но он развивается (в C99 добавили VLA и комплексную арифметику). 40 лет стагнации - это невежественный бред.

tailgunner ★★★★★
()
Ответ на: комментарий от procoder99

Я не хочу даже смотреть на твой щит.

Callback-и — довольно распостранённая практика (qsort, ftw, fuse_operations, X11, gtk, linux/fs.h, etc).

В нормальном коде функция будет каллица либо в шаге цикла, либо в шаге рекурсии

Ну если ты пишешь функцию обхода «для всех», то что делать в шаге цикла или рекурсии ты не знаешь — юзер в твою функцию должен передавать callback (path_action в той сигнатуре) который в этом шаге должен вызываться, что-то делать и возвращать либо stop (тогда ты выпрыгиваешь из traverse), либо goon (продолжаешь). Проблема в том, что если (наивная) traverse вернула управление после stop, то продолжить обход уже нельзя, тогда как с итераторами можно.

Зачем мне какие-то мароки с твоими состояниями?

Ага, это самоцель такая — обспечить себе кучу мороки с обощёнными контейнерами, алгоритмами, итераторами и т.п.

1) Нужны ли тебе структуры данных выделенные непосредственно с использованием языковых типов данных? 2) Нужно ли тебе отделять состояние и методы обхода этих данных от самих этих структур и конкретного кода обхода? 3) Если нужно, то как ты будешь это делать на си?

2) это и есть итератор — обычный класс дающий методы обхода объекты которого хранят полное состояние обхода, то есть данные отдельно, вся остнастка для их обхода — отдельно, клиентский код — тоже, алгоритмы тогда — тоже (как свободные шаблонные функции над итераторами и функциональными объектами, например).

quasimoto ★★★★
()
Ответ на: комментарий от tailgunner

Отсылки к латыни - это так солидно. Сразу понимаешь, что оппонент - не какая-то там школота.

Это отсылка к википедии. Если взять слово «стагнация» и набрать его в поисковой системе, первой ссылкой будет как раз вот это

40 лет стагнации - это невежественный бред

Ну, вам виднее

anonymous
()
Ответ на: комментарий от procoder99

Я ищу однаковые значения в 2-х твоих последовательностях, начиная правее последней?

Грубо говоря, ты можешь в обоих последовательностях зачеркивать числа. Нужно найти все способы зачеркнуть их так, чтобы оставшиеся последовательности были одинаковы и длина была максимальна.

Да, m и n — длины последовательностей.

Тесты, очевидно, заранее неизвестны, чтобы нельзя было заранее оптимизировать под конкретный бенчмарк.

Если в рамках х86, то не смеши мои тапки своей детской О-нотаций.

Ты не понимаешь смысла O-нотации. Если у твоего алгоритма асимптотика больше, то всегда найдется такой размер входных данных, на котором твоя программа на «сишке» сольет по времени исполнения программе с меньшей асимптотикой, написанной на чем угодно.

BlackHawk
()
Ответ на: комментарий от anonymous

А расскажите, как сильно изменился С за последние 40 лет?

сходу вспоминаются треды, unicode, VLA, inline, variadic macros, кстати тех же тредов в CL, например, нет, ну и как и в лиспах выросли надстройки - вроде того же glib

wota ★★
()
Ответ на: комментарий от anonymous

Если взять слово «стагнация» и набрать его в поисковой системе

Зачем? Ты правда думаешь, что я не знаю значения этого слова?

вам виднее

Да.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от procoder99

Ты перешол

Коэффициент грамотности зашкаливает — таки ты школьник

Тут либо прав, либо нет.

Печальная для тебя новость: ты не прав

Code Conventions писались для 95% обезъянок,

Лол.
Мне не о чем с тобой разговаривать.

comp00 ★★★★
()
Ответ на: комментарий от BruteForce

Он это в середине треда и сам писал -___-

читать все посты этого школьника-неадеквата? Ну уж нет, извольте

comp00 ★★★★
()
Последнее исправление: comp00 (всего исправлений: 1)
Ответ на: комментарий от anonymous

Других структур данных, кроме массивов, ламер не знает?

anonymous
()
Ответ на: комментарий от anonymous

Ему там же в каментах рассказали что в С тоже можно генерировать функции не руками, может получиться еще проще чем этот трешак с шаблонами

Перечитал камменты. Нашел упоминание про:
- «генераторы C кода, нап- ример XSLT» - что не является частью C, а является надстройкой.
- Boost.Preprocessor - погуглив немного понял, что по сути это библиотека, по де-факто это такой еще один язык (мета)программирования.

Поскольку примеров в камментах не было, и на основании того, что я нагуглил, эти две вещи как минимум сложнее, чем решение на C++. Может, они дадут и сходные результаты по скорости, но никто не удосужился привести конкретные примеры, решить задачу автора с использованием этих методов, показать бенчмарки. А я не люблю разговоры без фактов.

Kroz ★★★★★
() автор топика
Ответ на: комментарий от procoder99

И как твоя гомосяцкая кривая реализация будет работать для красночерного дерева, недоумок?

anonymous
()
Ответ на: комментарий от procoder99

Все же тебе стоило бы вскрыть себе вены. Нельзя жить таким безмозглым уебаном.

anonymous
()
Ответ на: комментарий от procoder99

Сын бляди, убей себя поскорее. Плюсы во многих случаях существенно быстрее твоей гомосяцкой сишки.

anonymous
()
Ответ на: комментарий от procoder99

Хуйло ничтожное, где твой пидарский код для уравнения теплопроводности? Не лезь, блядина, в новые темы, пока за свои предыдущие жидкие сливы не ответишь.

anonymous
()
Ответ на: комментарий от Kroz

никто не удосужился привести конкретные примеры, решить задачу автора с использованием этих методов, показать бенчмарки

Гм. Ну вот врывается, допустим, на лор кто-то такой весь в белом, достает задачу, генератор кода в С, сравнивает производительность с кодом на С++ и говорит что чистый С рвет С++ в клочья.

Вам интересно будет писать контрпример? Сколько минут жизни вы готовы на это портатить?

Мне было бы скучно что с одной, что с другой стороны. Практическая ценность от этих меряний - около нуля, решения разрабатывать на С или С++ принимают не на основании таких вот тестов.

Тем не менее, лоровцы с завидным упорством (и на полном серьезе!) доказывают друг другу правильность своего выбора. Невозможно же удержаться. Причем у тех кто склоняется к С++, самооценка более завышена, похоже на такое легкое головокружение от частого надувания щек.

Интересно, какие именно участки мозга парализуются, если после слов «мысленно рукопожимаю» не включается скептическое отношение к тексту?

tailgunner вон мучается, вместо того чтоб сразу с плеча сказать «невежественный бред», заходит издалека, фейспалмит. Ну ладно, зато теперь мы убедились что он знает слово «стагнация» и если написать что-то на латыни (а лучше еще и на французском) он думает что оппонент не школьник. Остальные, впрочем, тоже не подкачали. Лор - торт

anonymous
()
Ответ на: комментарий от anonymous

Мне было бы скучно что с одной, что с другой стороны. Практическая ценность от этих меряний - около нуля

Странно, но я считал, что здесь не философский кружок. Скучно? Наверное. Но если бы наш procoder99 заменил свои портянки реальным кодом да бенчмарками, путь даже три символа флейма к одному кода, то не было б столько слюней вокруг. Наоборот, зауважали б, спасибо говорили б.

решения разрабатывать на С или С++ принимают не на основании таких вот тестов.

А я бы заставил себя освоить новую технологию, если бы точно знал, что она приносит профит. А так, тратить полжизни на освоение чего-то нового, а в конце понять что это то же самое только вид с боку, как-то не хочется.

Если мне захочется лясы поточить, я скорее кликну друзей на пиво да куда-то на природу, благо погода сейчас отличная. А здесь я чтобы учиться.

Kroz ★★★★★
() автор топика
Ответ на: комментарий от Kroz

я бы заставил себя освоить новую технологию, если бы точно знал, что она приносит профит. А так, тратить полжизни на освоение чего-то нового, а в конце понять что это то же самое только вид с боку, как-то не хочется

Не парьтесь, осваивайте С++ и дальше. Ну, если выбор только из С и С++. Вероятность того что вам придется столкнуться с чистым С не так уж высока, а чем дальше тем еще меньше. Впрочем, даже если и столкнетесь зная С++, все будет нормально

anonymous
()
Ответ на: комментарий от Kroz

Я же сказал - я напишу тебе реализацию, которая будут в хламину рвать щит того автора, а если ты запостишь это на хабре, либо напишешь статейку, которую пропустят - я запилю тебе в 2раза быстрее.

procoder99
()
Ответ на: комментарий от quasimoto

калбаки - это труЪпацанская техника и в 98% они идеальна, поэтому суть не в них, а в том как ты их юзаешь. Ты пытаешься их подогнать под свой интератор, хотя мне это не упёрлось.

Ну если ты пишешь функцию обхода «для всех», то что делать в шаге цикла или рекурсии ты не знаешь — юзер в твою функцию должен передавать callback (path_action в той сигнатуре) который в этом шаге должен вызываться, что-то делать и возвращать либо stop (тогда ты выпрыгиваешь из traverse), либо goon (продолжаешь). Проблема в том, что если (наивная) traverse вернула управление после stop, то продолжить обход уже нельзя, тогда как с итераторами можно.

Дак в чём проблема - я каллю всё для всех, что там происходит дальше - меня не интересует( а так в 95% случаев и надо делать), для остальных случаев я запилю иной обход, который будет проверять то, что мне нужно.

1) Нужны ли тебе структуры данных выделенные непосредственно с использованием языковых типов данных? 2) Нужно ли тебе отделять состояние и методы обхода этих данных от самих этих структур и конкретного кода обхода? 3) Если нужно, то как ты будешь это делать на си?

Зачем мне что-то отдельть - у меня нет ООП говного мозга. Всё за висит от того, что мне надо сделать.

Выкатывай портянку - я покажу как я буду делать это на сишке.

2) это и есть итератор — обычный класс дающий методы обхода объекты которого хранят полное состояние обхода, то есть данные отдельно, вся остнастка для их обхода — отдельно, клиентский код — тоже, алгоритмы тогда — тоже (как свободные шаблонные функции над итераторами и функциональными объектами, например).

Это всё детские игрушки. Нужно мне обходить что-то - я запилю свой обход только для этой байды.

Мы живём в разных мирах. Я считаю твои техники ущербанскими, тормазнутыми и некрасивыми. Ты считаешь мою технику небезопасной и некрасивой, хотя я клал на безопасность - я не пишу код для обезъянок. Мой код должен юзать людь хотябы равный по скиллу мне, а остальное меня не интересует - для остальных есть стл и игрушки.

Вобщем, мы друг друга поймём лучше, если будет меняться портянками.

procoder99
()
Ответ на: комментарий от wota

птреды были всегда, юникод не упал на уровне языка остальное было в гцц лет 20.

За последние лет 20 Сишка не изменилась, а вот в плюсы и g++ влили столько сил, но он до сих пор по всем параметрам сливает Сишки 20летней давности.

procoder99
()
Ответ на: комментарий от anonymous

Да это практически такой же агрессивный норкоман писал как и 99-й пони, только с другой стороны и грамотнее.

Это писал идиот. Я никогда не позволю себе сражаться с куском какахи. Если уж я и буду уделывать С++ - я возьму самый лучший код. Он же взял Си-код, который я за 10минут довёл до уровня его С++ фуфла. Причем собирается моя байда за 0.5сек и жрёт 30метров памяти, а его 500секунд и жрёт 3000метров памяти.

Ну и да, это идиот ещё и потому, что он запилил СУБД, а СУБД и перфоманс не совместимы.

Если ненадолго включить моск (потом можно сразу выключить) и подумать, то это удивительно. Вот у нас есть бурно развивающийся 30 лет С++ и С, который больше 40 лет стагнирует. И их до сих пор сравнивают друг с другом. Причем, они идут вполне себе в одной категории, какого-то разгромного отрыва С++ не видно, хотя он задумывался именно как замена С.

Они не понимают, сколько сил было вложенно в стл и g++, чтобы он из стл гинерил уровень школьного Си-кода.

И несмотря на то, что сишка осталась в гцц на уровне 20летней давности - она до сих пор в хламину сметает все С++ конпеляторы.

procoder99
()
Ответ на: комментарий от BlackHawk

Тесты, очевидно, заранее неизвестны, чтобы нельзя было заранее оптимизировать под конкретный бенчмарк.

Ты упорот? Как так не известны, под какой такой бенчмарк. Читерить я не буду - но я должен примерно знать длинну, порядки значений. Очередное детское ололо.

Выкатывай давай.

Ты не понимаешь смысла O-нотации. Если у твоего алгоритма асимптотика больше, то всегда найдется такой размер входных данных, на котором твоя программа на «сишке» сольет по времени исполнения программе с меньшей асимптотикой, написанной на чем угодно.

Очередное детское понимание. Когда ты пишешь своё сложение последовательностей для дела, а не для балавства, то у тебя всегда есть данные определённых параметров.

И в зависимости от них уже пилится реализация - если это терабайты - это один подход, если это гигабайты - другой, если мегабайты - третий, если килобайты - 4-й.

Пилят хренпоймичто только анскильные детки, которые не знают, что такое перфоманс и на чём он основан.

И да, в твоём идеальном мире да, в реальном люди не учитывают длинны последовательностей больше нужных, а так же длинны, которые за пределами х86.

Поэтому выкатывай бенч - я буду смотреть, код я тебе дам - я читерить не буду. Ты можешь выкатить пару бенчей - я запилю тебе для каждого из них.

procoder99
()
Ответ на: комментарий от procoder99

Я же сказал - я напишу тебе реализацию, которая будут в хламину рвать щит того автора, а если ты запостишь это на хабре, либо напишешь статейку, которую пропустят - я запилю тебе в 2раза быстрее.

Я не имею аккаунта на хабре, посему я не cмогу запостить твою статью. И почему ты сам не хочешь запостить?
Если честно, то я посчитал бы такой материал весьма и весьма полезным. Если не можешь сам замостить - попроси кого-то. И сбрось ссылочку сюда :)

Kroz ★★★★★
() автор топика
Ответ на: комментарий от procoder99

Пусть будет порядка 10^4 32-битных чисел со знаком. Возьми генератор случайных чисел и нагенерируй сотню тестов, например

длинны последовательностей больше нужных, а так же длинны, которые за пределами х86.

Асимптотически неэффективный алгоритм сольется на данных, и близко не подходящих к ограничениям

BlackHawk
()
Ответ на: комментарий от Kroz

Ты похоже не понимаешь, что мои статьи не пропускают из-за слишком большого скилла.

Мои эпитеты, аля «Мой вендоус был удалён, все диски с ним сожжены, а хард занулён и окраплён святой водой. Воздав молитвы столману, чтобы он оградил меня от ересь маздайской я ...» очень любят на хабре.

Последние, что я писал было выпеленно в хламину. Хотя я хотел объяснить школьникам суть этого мира - на почитай, тебе будет полезен этот маленький отрывочек: http://pastebin.com/269pedz3 Я пытался писать языков, доступным школьнякам и прочим анскиллед.

Знаешь почему ещё живы такие сущности, как твой автор? Есть некоторые люди( их почти 0), которые реально понимают, что такое перфоманс - дак вот, эти люди от одного вида породии на СУБД плюнут тебе в рожу и скажут, что ты идиот.

Хорошо, я напишу статейку для лара и разберу почему твой автор щит, и почему ваш подход фуфло, с кодом и прочим.

Сначала я разобью в хлам автора, а потом покажу вам, как это делают пропацаны.

procoder99
()
Ответ на: комментарий от BlackHawk

Пусть будет порядка 10^4 32-битных чисел со знаком. Возьми генератор случайных чисел и нагенерируй сотню тестов, например

Тут дело не в нагинерить, а в моём интересе. Ты же это не просто так вспомнил, вы вспоминаете только то, что вы юзаете - значит ты это юзаешь и у тебя есть примерные нужные тебе последовательности и ты можешь взять их и забенчить.

Вот запили такой бенч и скажи за сколько он решает твою последовательность, можешь натравить на него perf(linux/tools/perf) stat вместо time, запостить pcuinfo - мне это поможет.

И тогда я уже буду знать какого уровня мне нужен код, и я не буду заставлять тебя долго ждать.

Асимптотически неэффективный алгоритм сольется на данных, и близко не подходящих к ограничениям

n vs n*m возможно, а вот реальные примеры нет. И то в рамках х86.

procoder99
()
Ответ на: комментарий от procoder99

Последние, что я писал было выпеленно в хламину. Хотя я хотел объяснить школьникам суть этого мира - на почитай, тебе будет полезен этот маленький отрывочек

Почитал.
Что же это за школа, кто в ней учится и зачем - Что это за школа и зачем я пока писать не буду - это вызовет лютую попаболь, мы подойдём к этому позже.
Я бы тоже выпилил.

Есть понятие сообщение, есть понятие метасообщение. Или по-простому: есть информация, есть ее подача, обертка. При этом обертка тоже несет информацию. На самом деле метасообщение (обертка) - это 80%-90% того, что на самом деле слышит человек. Может ты и на самом деле так крут, как заявляешь, может ты и говоришь все правильно, но метасообщение твое говорит об обратном.

Чем я могу помочь - я могу провести ревизию твоей статьи, и переоформить ее так, чтобы ее пропустили. И ты сможешь ее запостить как свою.

Условия:
1. Постановка задачи: доказать неверность утверждений автора статьи http://habrahabr.ru/post/182356/ и http://habrahabr.ru/post/182428/
2. Метод: привести контр-пример (код), описать его работу, провести замеры скорости работы.
3. Критерии: при абсолютно тех же условиях задачи (не добавляя других условий), код на C должен выполняться быстрее или хотя бы так же, и при этом быть сравнимым по сложности (ведь статья называется «Скорости разработки и исполнения...»).

То есть чтобы можно было «поставить рядом» код автора и твой код, и показать, что твой выдает тот же результат при тех же начальных условиях, и при этом работает быстрее.

P. S. Сразу оговорюсь, что Visual C у меня нет, есть только gcc.

Kroz ★★★★★
() автор топика
Ответ на: комментарий от procoder99

Ты пытаешься их подогнать

man 3 nftw же.

Выкатывай портянку - я покажу как я буду делать это на сишке.

Да я видел уже. Ну раз тред про фориач, то хотя бы вот:

    typedef Tree<char> T;

    // Это бинарное дерево на стеке, если что, создать вложенными expression-ами не осилил (в .bss лезет, видимо).
    T a('a'), c('c'), e('e'), d('d', c, e), b('b', a, d),
      h('h'), i('i', h), g('g', i, false), f('f', b, g);

    for (auto &n : f) { // using T::InOrder
        printf("%c\n", n);
        n += 3; // ок
    }

    for_each(f.begin(), f.end(), [](char &n) { return ++n; });

    for (auto const &n : f) {
        printf("%c\n", n);
        // n += 3; <- обломались
    }

    printf("%d\n", accumulate(f.begin(), f.end(), 0,
                              [](int x, char c) { return x + c - 'a'; }));

другие обходы не берём, хотя в T может быть много итераторов (пре, пост, по уровням, по детям, на заданную глубину, по уровню в одну сторону, в другую, обратные итераторы и т.п.) — но они усложнят саму структуру Tree. Как ты решишь проблему TreeOfInt, TreeOfDouble, ... -> Tree<T>? Саму итерацию как? Выше в коде Tree дешёвый — та же нода и пара-тройка указателей, итератор — пара указателей, весь код итератора итеративный и спокойно инлайнится (HOFы из <algorithm> тоже инлайнятся). Помимо полиморфизма по содержимому ноды — те же constness гарантии, for сам по себе трудноломаемый, плюс <algorithm> & co легко подключаются в дополнение к такому итератору.

Это всё детские игрушки.

А вот ты знаешь про не функциональные требования к ПО и понятие метрического пространства? Какую метрику ни возьми — стратегия «производительность — всё, остальное — по боку» будет хороша ровно тогда, когда оценка производится _только_ по перформансу, в остальном решение которое будет более-менее хорошим (но не идеальным) по всем оценкам будет лучше чем решение которое никакое по всем параметрам кроме одного (по которому оно идеально).

quasimoto ★★★★
()
Ответ на: комментарий от procoder99

ты это юзаешь и у тебя есть примерные нужные тебе последовательности и ты можешь взять их и забенчить.

Нет, мне случайно в голову пришло. У меня есть только тесты на нахождение произвольной НОП с количеством элементов не больше 1000.

n vs n*m возможно, а вот реальные примеры нет. И то в рамках х86.

Это какие реальные примеры? Квадратичная сортировка на 10^5 элементов в несколько тысяч раз медленнее, чем за n*log(n), например. Хоть заоптимизируйся, быстрее не будет.

BlackHawk
()
Ответ на: комментарий от Kroz

Есть понятие сообщение, есть понятие метасообщение. Или по-простому: есть информация, есть ее подача, обертка. При этом обертка тоже несет информацию. На самом деле метасообщение (обертка) - это 80%-90% того, что на самом деле слышит человек. Может ты и на самом деле так крут, как заявляешь, может ты и говоришь все правильно, но метасообщение твое говорит об обратном.

Суть в том, что я по природе халявщик. Я ничему не учился, я ничего не пытался - я не знаю как это. Я просто играюсь и делаю то, что мне нравится.

Считай, что я родился в семье богачей и у меня с рождение было всё. Так вот мне сложно понять(и быть понятым) тех людей, которые к моему уровню подходили долго и своим трудом.

Когда я пишу - я меняю формулировку по 10раз находу, если мои рассуждения зашли слишком глубоко - я нажимаю бекспейс больше, чем символов в моей месаге.

Поэтому у меня бывают повторения, неправильные слова или ещё что-то.

Если я буду писать откровенно и так, как оно есть - меня забананят в момент, поэтому я учусь с вами общаться.

Чем я могу помочь - я могу провести ревизию твоей статьи, и переоформить ее так, чтобы ее пропустили. И ты сможешь ее запостить как свою.

Да мне без разницы моя она или нет. Суть моей траты времени на это - поучится и указать на фейлы. На фейлы укажет статья, а в процессе запила кода - я научусь это пилить и в следующий раз я запилю это в 10раз быстрее.

1. Постановка задачи: доказать неверность утверждений автора статьи http://habrahabr.ru/post/182356/ и http://habrahabr.ru/post/182428/

Ой как я покажу.

2. Метод: привести контр-пример (код), описать его работу, провести замеры скорости работы.

Я просто приведу его Си-фуфло во вменяемое состояние. Ах да, знаешь как мне круто ждать 10минут, убивая при этом всё, вклячая броузер и etc, ибо у меня 4гига оперативы, а гцц жрёт 3гига.

3. Критерии: при абсолютно тех же условиях задачи (не добавляя других условий), код на C должен выполняться быстрее или хотя бы так же, и при этом быть сравнимым по сложности (ведь статья называется «Скорости разработки и исполнения...»).

У него нет условий. На сложность для анскилледа я клал. Он слил неделю на написание своих шаблонов, при этом среднестатистический анскиллед будет их месяц писать.

То есть чтобы можно было «поставить рядом» код автора и твой код, и показать, что твой выдает тот же результат при тех же начальных условиях, и при этом работает быстрее.

И компилруется не 20минут, а потом я покажу этой анскилябре, как это пишут пропацаны. Ты упускаешь главное.

P. S. Сразу оговорюсь, что Visual C у меня нет, есть только gcc.

Т.е. ты предпологаешь, что для вменяемого сишника существует визуалСи? Не смеши мои тапки.

procoder99
()
Ответ на: комментарий от BlackHawk

Нет, мне случайно в голову пришло. У меня есть только тесты на нахождение произвольной НОП с количеством элементов не больше 1000.

Выкатый их для начала, и пости выхлоп perf. Я уже неоднократно писал - я не могу побиждать не зная того, что мне надо побиждать.

Я буду побиждать сам себя, а сам себя я буду побеждать очень долго. Мне нужен брекпоинт.

Это какие реальные примеры? Квадратичная сортировка на 10^5 элементов в несколько тысяч раз медленнее, чем за n*log(n), например. Хоть заоптимизируйся, быстрее не будет.

В том и дело, что квадратичная, только в реальном мире её юзать будут только для десятков елементов, где она будет сливать любую другую.

Реальный мир - это когда я выбираю вменяемый алгоритм, который я реализую лучше, и даже если он хуже - он будет работать быстрее.

procoder99
()
Ответ на: комментарий от quasimoto

Я клал на абстрактные, никому не нужные проблемы. Никаких NP проблем в реальном мире почти нет.

Полистал я твою байду - щит на щите. Никаких вменяемых примеров из реального мира нет.

Это как наш спор с анонимусом, про распределение по регистрам. В головах анскилледа это NP-проблема, в глазах скиллед - банальная байда со сложность 0.

В реальном мире есть ещё тысяча факторов, которые NP-проблемы превращают в банальность.

Ещё раз повторюсь, я клал на проблемы теоретиков. Я клал на код теоретиков. Меня не интересуют проблемы обхода деверьев, которые нахрен не упали в 95% случаев, а их обход не упал в 95% случаев.

Я сам дапилю структуру данных такую, которая нужна мне, которая подходит под мои данные и задачу, а на остальное я клал.

procoder99
()
Ответ на: комментарий от quasimoto

Ты ведь понимаешь, что я выкину твоё дерево и избавлюсь от проблем.

Меня не итересуют твои блеблы основанные на «аесли» - а если я клал.

Ты мне описываешь что тебе надо с досканальными подробностями - я говорю как я это запилю. Бревно не нужно в 95% случаев, а то, что вы любите его пихать везде и бороться с проблемами - ваши проблемы.

А вот ты знаешь про не функциональные требования к ПО и понятие метрического пространства? Какую метрику ни возьми — стратегия «производительность — всё, остальное — по боку» будет хороша ровно тогда, когда оценка производится _только_ по перформансу, в остальном решение которое будет более-менее хорошим (но не идеальным) по всем оценкам будет лучше чем решение которое никакое по всем параметрам кроме одного (по которому оно идеально).

Наивный, идеально решение идеально тем, что она настолько подходит к задаче, что летает. Оно является самым простым решением из всех.

А вот средние по эффективности универсальныер ешения - самые сложные из всех, и какраз-таки они и в хламину сливают по всему.

procoder99
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.