Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Сегодня проектировал стек LIFO, вот что получилось stack.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. stack.c Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 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. Подскажите пожалуйста, как правильно реализовать функцию createStack() ? Мне не нравится использование SEMPTY, но пока не придумал как от этого избавиться. Как бы вы поступили ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 03:37 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryМне не нравится использование SEMPTY, но пока не придумал как от этого избавиться. Как бы вы поступили ? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 10:54 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Еще лучше кидать исключение, но их нет в С. Можно их имитировать через setjump/longjump. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 11:27 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Считаю, что C-style стек должен выглядеть как-то так: stack.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. stack.c Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 12:53 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСегодня проектировал стек LIFO, вот что получилось Если ты идёшь по пути чистого С, то один malloc лишний: гораздо удобнее работать со структурой переменного размера, поскольку память не фрагментируется. Указывать максимальный размер стека при создании, возможно, соответствует техзаданию, но тоже абсолютно излишне. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 13:17 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Аноним123, хочу реализовать стек как один объект ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 13:33 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovSashaMercuryСегодня проектировал стек LIFO, вот что получилось Если ты идёшь по пути чистого С, то один malloc лишний: гораздо удобнее работать со структурой переменного размера, поскольку память не фрагментируется. Указывать максимальный размер стека при создании, возможно, соответствует техзаданию, но тоже абсолютно излишне. Вы предлагаете реаллоцировать при добавлении элемента? Если я вас правильно понял, то думаю что это спорный момент. Реаллоцирование тратит много времени. Максимальный размер стека необходим для безопасной работы программы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 13:39 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВы предлагаете реаллоцировать при добавлении элемента? Нет, я предлагаю использовать связанный список буферов. Возможно, заранее предопределённого размера. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 13:47 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Сейчас коллеги мы дойдем до формулы расчёта Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 14:14 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovSashaMercuryВы предлагаете реаллоцировать при добавлении элемента? Нет, я предлагаю использовать связанный список буферов. Возможно, заранее предопределённого размера. Связанный список и надо использовать. Т.е. что значит -- надо ? Обычно так делают. SashaMercury, у тебя это даже не совсем стек. Т.е. стек, но на базе массива. А обычно делают стек на базе связного/двусвязного списка. Хотя, конечно, и такой стек имеет право на существование, у обоих есть свои преимущества и недостатки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 14:52 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
MasterZivDimitry Sibiryakovпропущено... Нет, я предлагаю использовать связанный список буферов. Возможно, заранее предопределённого размера. Связанный список и надо использовать. Т.е. что значит -- надо ? Обычно так делают. SashaMercury, у тебя это даже не совсем стек. Т.е. стек, но на базе массива. А обычно делают стек на базе связного/двусвязного списка. Хотя, конечно, и такой стек имеет право на существование, у обоих есть свои преимущества и недостатки. т.е. всё-таки это стек, конечно. Такой стек, и именно реализация на базе массива имеет право на существование в первую очередь. PS В каком году появился связный список, и в каком году Алан Тьюринг придумал стек ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 15:37 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, SSВ каком году появился связный список, и в каком году Алан Тьюринг придумал стек ? До середины 20 века появился стек. А ответ на первый вопрос я не знаю, ту книгу что вы мне рекомендовали(об истории IT), пока даже не прочитал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 15:40 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryPS В каком году появился связный список, и в каком году Алан Тьюринг придумал стек ? Году в 50-55 стек придумали. Это если аппаратно первая ЭВМ была без стека. Если была -- ещё раньше, в 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 16:24 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
MasterZivSashaMercuryPS В каком году появился связный список, и в каком году Алан Тьюринг придумал стек ? Году в 50-55 стек придумали. Это если аппаратно первая ЭВМ была без стека. Если была -- ещё раньше, в 45. Так и предполагал. Значит проблему с функцией push() в данном примере нельзя решить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 01:40 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
можно и так: return SEMPTY; ----> raise(SIGSEGV); Вполне подходит по смыслу к попытке достать число из пустого стека. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 03:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
wst, если вы комментировали моё сообщение про push(), то я о другом спрашиваю . А вы говорите про функцию pop() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 06:01 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Стек я бы делал, как выше писали, в виде связанного списка массивов. Это минимизирует аллокации, не требует реаллокаций, и не требует при создании стека заранее задавать размер. Задача контроля за чрезмерным выделением памяти не должна влиять на структуру данных. Никто вам не мешает контролировать это при любой реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 08:30 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, не очень понятно. Как он может не требовать реаллокации ? Только в том случае если мы выделили памяти сразу столько, сколько нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 08:43 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Каждый вызов push() аллоцирует объём памяти, равный размеру данных плюс размер указателя на следующий элемент. Каждый pop() освобождает такой же объём; реаллокации нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 09:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Все эти споры дают понять, почему в STL стек и очередь -- это адаптеры, реализованные над тремя базовыми структурами -- vector, deque и list. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 09:58 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
RWolf, теперь понятно Ладно, с учётом того что сейчас это сделано так, как всё-таки решить проблему выделенную жёлтым цветом ? Возможно ли это в данной реализации ? Anatoly Moskovsky, как же контролировать объём данных ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 10:28 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryкак всё-таки решить проблему выделенную жёлтым цветом ? Убрать скобки. И в следующей строке - тоже. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 11:58 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Елы-палы, я не заметил этот вопрос... Да всё просто -- литерал с именем функции -- это переменная с типом "указатель на функцию с данной сигнатурой". Так что -- да, достаточно в строке убрать скобки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 12:25 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Следующая за жёлтой строка, кстати, неверна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 12:27 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЛадно, с учётом того что сейчас это сделано так, как всё-таки решить проблему выделенную жёлтым цветом ? Возможно ли это в данной реализации ? Как исправить - уже сказали. Но суть в том что указатели на функции в экземплярах объекта вообще не нужны - там нет никакого полиморфного поведения. Используйте обычные свободные функции. SashaMercuryкак же контролировать объём данных ? Хранить кол-во элементов и в push проверять достигнут ли предел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 14:22 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНо суть в том что указатели на функции в экземплярах объекта вообще не нужны - там нет никакого полиморфного поведения. В данном случае - да, не нужны. Поскольку применяются (точнее применялись) именно только тогда, когда полиморфизм необходим. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 15:03 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
В push() тоже самое - если места нет то raise(SIGSEGV). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 15:03 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
wstВ push() тоже самое - если места нет то raise(SIGSEGV). А чего ж уж сразу не abort()? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 15:09 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Это вобщем напоминает лабы на 1 курсе где мы изучали списки, однонаправленные, двунаправленные и скип-списки. Саш. Дался тебе этот стек. Давай чё нить полезное пилить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 16:00 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
И на С++, а не на голом С... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 16:07 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
не abort() потому что 1) SIGSEGV - Invalid access to storage like segment violation - вполне подходит по теме. И да, никто не запрещает этот сигнал обработать, не прибивая программу если это действительно нужно. 2) SIGABRT, посылаемый абортом уже немного не то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 16:26 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Потонем в советах. Мне кажется что С++ и обработка сигналов это каг-бе разные левелы разработки. Нет конешно я не против. Но давненько не брал в руки шашек. Как там принято грамотно вывалится из С++ приложения в ОС. Бросив экцепшен? Или всё таки послать сигнал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 16:34 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonДавай чё нить полезное пилить.... сказал человек, превращающий пяток условных операторов в логическое непотребство ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 16:42 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Дай бох кому-то хоть интерес поднял. По сабжу С++ весьма уныл на дискурсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:26 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonДай бох кому-то хоть интерес поднял. По сабжу С++ весьма уныл на дискурсы. Потому что в нем на базовом уровне не нужно заниматься такой увлекательной ерундой, как указатели на функции и ручное управление памятью. )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 20:47 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Давайте не будем off. А то получите все от меня банан. И какой пример подаём мемберам? По сабжу есть чего. Сигналы или Exceptions? Best practices. Вася. Толик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 20:50 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonСигналы или Exceptions? Best practices. Если С - то код возврата, если С++ то исключения. Ну еще можно проверять условие и вызывать abort(). (Т.к. в принципе программа читающая из пустого стека некорректна и ее надо завершить пока она там че-то посерьезнее не натворила) Но этот вариант не всегда приемлем с точки зрения удобства пользователя - не каждому захочется пользоваться программой которая при любом чихе завершается не сохранив введенную информацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 23:20 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток C: maytonПотонем в советах. Мне кажется что С++ и обработка сигналов это каг-бе разные левелы разработки. Нет конешно я не против. Но давненько не брал в руки шашек. Как там принято грамотно вывалится из С++ приложения в ОС. Бросив экцепшен? Или всё таки послать сигнал? сразу вспомнил известную песенку Лаза из Лукьяненко :D авторДавно я не давил кишку наружу, Давным-давно кишку наружу не давил, И вот совсем недавно обнаружил, Что я давно кишку наружу не давил. А ведь бывало я как выдавлю наружу! Никто из наших так наружу не давил! И я один за всех давил наружу, За все наружу я тогда один давил! Бывает, щас я иногда давлю наружу, Но это щас, совсем не как тогда. Совсем не так давиться наружу, Давить, как раньше, я не буду никогда. :D ну да ладно. сейчас проверю скобки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 01:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, MasterZiv вы правы. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 02:08 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySSкак же контролировать объём данных ? Хранить кол-во элементов и в push проверять достигнут ли предел. так и делаю. Разве нет ? mayton Саш. Дался тебе этот стек. Давай чё нить полезное пилить. Давайте :) Но структуры данных я должен научиться сам делать. Предполагаю они уже реализованы в стандартных библиотеках, но нужно самому разобраться какими способами их можно реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 02:12 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryтак и делаю. Разве нет ? Вы так и делаете, потому что по-другому с той структурой нельзя - только заранее задать размер. А если по техзаданию не должно быть такого лимита, то ваша структура в пролете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 02:20 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercurymaytonСаш. Дался тебе этот стек. Давай чё нить полезное пилить. Давайте :) Но структуры данных я должен научиться сам делать. Предполагаю они уже реализованы в стандартных библиотеках, но нужно самому разобраться какими способами их можно реализовать. хе, давай бинарные деревья с PathCoping, что стэки то мучать Decart Tree (для олимпиад самое то), AVL, RB, Weight-balanced тоже очень интересен глядишь и до concurrent структур дойдём :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 08:14 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Кажется, об этом еще никто не написал, функция push должна параметр el как-то использовать, видимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 09:45 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДавайте :) Но структуры данных я должен научиться сам делать. Предполагаю они уже реализованы в стандартных библиотеках, но нужно самому разобраться какими способами их можно реализовать. Уважаю Лукьяненко. Но стишки у него во всех книгах - позорные. По теме стека. Как говорил Илья - это тема избитая. И stl ее шаблонизирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 13:17 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)хе, давай бинарные деревья с PathCoping, что стэки то мучать Decart Tree (для олимпиад самое то) Еслия правильно понял это круть несусветная для поиска в диапазонах. Я вот думал над оптимальным планом поиска. Дано. Код: plsql 1. Код: plsql 1. Код: plsql 1. Код: plsql 1. Коробочные решения dbms обычно не умеют использовать оба индекса одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 13:34 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonКоробочные решения dbms обычно не умеют использовать оба индекса одновременно. У них есть статистики распределения значений в индексе, для грубой оценки какой индекс лучше подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 13:50 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonКоробочные решения dbms обычно не умеют использовать оба индекса одновременно. Не одновременно, но умеют. Firebird, например, раскладывает условие between на >= и <=?, а потом сначала достаёт битовую маску записей из одного индекса для первого условия, потом из второго, а потом их складывает и по результату выбирает собственно записи. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 13:52 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonКоробочные решения dbms обычно не умеют использовать оба индекса одновременно. У них есть статистики распределения значений в индексе, для грубой оценки какой индекс лучше подходит. Тут дело не в статистиках. Возьмём к примеру даже абсолютный RULE_BASED_OPTIMIZER. А дело в том что в большинстве DBMS нет возможности реализовать этот кейс с двумя индексами одновременно. Есть кластеризация и партишионинг. Но это другое. Это просто сужает область поиска. Единственно что действительно оптимизировано для поиска точки в множестве интервалов это гео-поиск (spatial структуры), RadixTree и, возможно этот замечлательный Decart Tree. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 14:59 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonkealon(Ruslan)хе, давай бинарные деревья с PathCoping, что стэки то мучать Decart Tree (для олимпиад самое то) Еслия правильно понял это круть несусветная для поиска в диапазонах. Я вот думал над оптимальным планом поиска. Дано. Код: plsql 1. Код: plsql 1. Код: plsql 1. Код: plsql 1. Коробочные решения dbms обычно не умеют использовать оба индекса одновременно. Rushmore в FoxPro вроде ровно это и делал (пересечения индексов), но его купили только заради этого патента, а в MSSQL видимо вставить забыли. А может и не забыли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 15:06 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonDima Tпропущено... У них есть статистики распределения значений в индексе, для грубой оценки какой индекс лучше подходит. Тут дело не в статистиках. Возьмём к примеру даже абсолютный RULE_BASED_OPTIMIZER. А дело в том что в большинстве DBMS нет возможности реализовать этот кейс с двумя индексами одновременно. Почему нет возможности ? Возможность есть, нет патента (или надо за использование платить). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 15:08 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Хорошая тема по поводу MSSQL. Тестил на Ораклах, Постгресах, МайСКЛ. Надо потестить еще на МС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 15:22 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
MasterZivRushmore в FoxPro вроде ровно это и делал (пересечения индексов) рашмор такие пересечения не оптимизирует Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Результатselect * from fuckenOperations where date() between begin and end Rushmore optimization level for table fuckenoperations: none ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 15:24 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dima TMasterZivRushmore в FoxPro вроде ровно это и делал (пересечения индексов) рашмор такие пересечения не оптимизирует Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Результатselect * from fuckenOperations where date() between begin and end Rushmore optimization level for table fuckenoperations: none Да теперь уже и не выяснить точно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 17:11 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Есть упоминания в разделах MS Vis FoxPro. Using Rushmore Query Optimization to Speed Data Access https://msdn.microsoft.com/en-us/library/1f5d2sa3(v=vs.80).aspx Но не могу найти связей или ссылок к MSSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 17:23 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Ну не знаю, может и глюки у меня. ложная память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 18:56 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
MasterZivА может и не забыли. насколько я помню - не забыли давно читал о судьбе оного ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 20:02 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
MasterZivДа теперь уже и не выяснить точно. Я же тебе показал сообщение фокспрошного оптимизатора. "none" - значит не используется рашмор. maytonНо не могу найти связей или ссылок к MSSQL. Связь на уровне слухов: движок MSSQL допиливала та же команда разработчиков, которая делала фокс. PS Фоксовый рашмор был супер-технологией 25 лет назад, когда его изобрели. После этого каких-то серьезных доработок движка не было. MS после покупки FoxPro 2.0 DOS допилил только интерфейсную часть (перевел под виндовс). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 08:20 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dima T рашмор такие пересечения не оптимизирует Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Результатselect * from fuckenOperations where date() between begin and end Rushmore optimization level for table fuckenoperations: none Поэксперементировал немного, если запрос переписать так Код: sql 1. соптимизируется рашмором и задействует оба индекса. логи оптимизатораUsing index tag Idx_begin to rushmore optimize table fuckenoperations Using index tag Idx_end to rushmore optimize table fuckenoperations Rushmore optimization level for table fuckenoperations: partial Скорее всего произойдет следующее: прочитаются оба индекса, из каждого выберутся указатели на записи удовлетворяющие условию, найдется пересечение, прочитаются записи попавшие в пересечение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 08:48 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Насколько я себе понимаю этот план требует полного обхода двух индексов и генерации биткарты типа 2 колонки на количество строк в индексе с последущей булевой операцией пересечения этих двух бит-признаков. Верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 13:41 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Полный обход только части индекса. Например для условия key >= X сначала находим X (или ближайшее меньшее) и дальше перебор всех последующих. В остальном верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 13:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
вот вы пофлеймить, господа лучше бы структуры написали которые стоит поковырять 2 mayton, под Decart Tree имелось ввиду бинарное Декартово дерево (которое в качестве Ordered Map можно использовать), а не декартово дерево отрезков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 14:00 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), структуры которые стоит поковырять? Ну... давай список. Мыж не Базисты. Мне вообще всегда интересна прикладная задача в применении к структурам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 17:13 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mayton, От умеют люди испортить топик. Особенно модераторы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 23:09 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Вы не поверите что вчера было. Мне вчера принесли книгу Бьёрна Страуструпа, но она 2001 года. Я зашел в книжный магазин, ибо мало ли чего в последней версии изменили, хотел купить новую. Той книги там конечно не было(буду читать что есть). Зато я встретил книгу про Java, автор Роберт Лафоре. Называется примерно "Cтруктуры и алгоритмы на Java". Не удержался, и вы знаете что я нашёл в содержании и затем открыл. И когда посмотрел как реализован стек, то удивился, ибо максимальный размер стека хранился в структуре Stack. Я конечно больше верю Анатолию, и вероятно так не стоит делать (хотя сам для себя ещё не доказал почему не стоит), но зато пришел к выводу, что и в книгах бывают вот такие ошибки или как минимум неоднозначно правильные реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2015, 06:34 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, почему же ошибки? Все приведённые варианты "правильны" главное чтоб применялись адекватно задаче. Для встроенной системы, например, вполне адекватно выглядит стек на базе статического массива фиксированного размера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2015, 11:17 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Тут надо понимать, что у автора книги нет задачи создать применимую на практике программу. У него задача - продать книгу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2015, 12:29 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Саш. Есть разные уровни понимания и приятия наук. Это как классическая механика и СТО. Они не противоречат друг другу. Просто одна из них дополняет и расширяет другую. Смысл операций со стеком можно объянисть одной картинкой. Или примером из жизни. А как его закодить на конкретном ЯП под конкретные ЗАДАЧИ - это другой левел понимания. Стек может быть нативным (сегмент стека в ассемблерной программе) или реализованным поверх массива, списка, дека. Или каких нибудь древоводиных структур. Это всё - СТЕКИ. И они все правильные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2015, 19:48 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Марк, нет, классическая механика это только приближение к реальному положению дел при малых скоростях(и вполне возможно что специальная теория относительности также приближение). Тогда, скорее все они(реализации стека) неправильные. У каких-то больше недостатков, у каких-то меньше. Ну да ладно, главное, вашу идею понял, только интерпретация будет такая, как написал предложением выше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2015, 02:51 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Не надо так прямолинейно переносить "игры разума" (компьютеры) на реальную жизнь (физика). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2015, 05:13 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Анатолий, кажется я понял почему вы говорили что не стоит хранить максимальное число элементов в структуре Stack. Если все стеки предполагаются одинакового размера, то смысла в этом действительно нет никакого. Но моё проектирование было рассчитано на создание стеков различной мощности, потому размер привязал к объекту. Правильно ли я понял ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2015, 09:46 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
MasterZivЕще лучше кидать исключение, но их нет в С. Можно их имитировать через setjump/longjump. Спасибо за совет. Странно, в стандарте Си не нашёл об этом ничего. По ощущениям, это как-то связано с goto ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2015, 09:53 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryАнатолий, кажется я понял почему вы говорили что не стоит хранить максимальное число элементов в структуре Stack. Я такое не говорил )) Я говорил что не стоит закладывать такое ограничение в сам дизайн стека. Т.е. стек должен быть произвольного размера, а ограничение, если оно нужно, - проверять отдельно от реализации стека. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2015, 10:25 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryАнатолий, кажется я понял почему вы говорили что не стоит хранить максимальное число элементов в структуре Stack. Я такое не говорил )) Я говорил что не стоит закладывать такое ограничение в сам дизайн стека. Т.е. стек должен быть произвольного размера, а ограничение, если оно нужно, - проверять отдельно от реализации стека. а где хранить эти ограничения на стек ? Это я к тому, что пусть в программе будет использоваться 100 стеков, например ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2015, 14:19 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury а где хранить эти ограничения на стек ? Это я к тому, что пусть в программе будет использоваться 100 стеков, например 1. просто переменную заводишь и проверяешь её если нужно ограничение 2. а количество элементов только памятью доступной должно быть ограничено ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2015, 14:27 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), 100 переменных заводить для 100 стеков ? Или массив переменных ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2015, 14:38 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercurykealon(Ruslan), 100 переменных заводить для 100 стеков ? Или массив переменных ?) вот ответь на вопрос, зачем тебе стек надо ограничить? это имеет смысл только если ты пытаешься сделать его ускоренную реализацию, резервируя память заранее, но для этого проще новый класс написать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2015, 14:44 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), это имеет смысл как вопрос безопасности. Нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2015, 14:58 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)это имеет смысл только если ты пытаешься сделать его ускоренную реализацию, резервируя память заранее, но для этого проще новый класс написать На самом деле, реализация в виде списка массивов по скорости ничем не уступает просто массиву )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2015, 15:03 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Горчо любимый realloc(..) не нужен. Просто выделяем еще EXTENT и полетел стек как птица... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2015, 15:49 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskykealon(Ruslan)это имеет смысл только если ты пытаешься сделать его ускоренную реализацию, резервируя память заранее, но для этого проще новый класс написать На самом деле, реализация в виде списка массивов по скорости ничем не уступает просто массиву )) конечно не уступает, это уже крайний случай когда всё упрощается до беспредела в целях выжать всё возможное из системы SashaMercuryэто имеет смысл как вопрос безопасности. Нет ? ну тоже имеет смысл, хотя в обычном приложение достаточно эксепшена при нехватке ресурсов и резона накладывать ограничения на размер стека на уровне реализации нет 2 SashaMercury: нет смысла маниакально следить за ресурсами, преждевременная оптимизация - зло (достаточно представлять как работает и знать слабые места) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 06:28 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, по поводу структур и их реализаций есть библиотека FCL-STL, она является частью fpc (скачать можно отсюда http://www.freepascal.org) исходники у неё очень просто и понятно написаны (куда проще чем GNU STL для C++) , лежат fpc\{версия}\source\packages\fcl-stl\ там же есть и дока (цена операций и пр.) для обучения и сравнения самое то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 08:34 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury , вот ещё структурка Rope (Верёвка) для нахождения агрегатов за O(log(N)), можно на основе Weight-balanced дерева сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 13:19 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Правильно ли я помню, что при проектировании структуры, в случае, когда на объект структуры предполагаются операции связанные с аллоцированием, необходимо расположить этот элемент последним ? fe Код: plaintext 1. 2. 3. 4. 5. 6. Подскажите пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 03:57 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. Правильно ли я помню, что при проектировании структуры, в случае, когда на объект структуры предполагаются операции связанные с аллоцированием, необходимо расположить этот элемент последним ? fe Код: plaintext 1. 2. 3. 4. 5. 6. Подскажите пожалуйстаВ данном случае это не важно. Указатель это объект вполне определенного размера, а значит он может быть где угодно внутри структуры. Другое дело, если ты изначально собираешься сделать структуру с переменной длиной, тогда массив надо делать последним: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 07:24 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White Owl, но позже я могу выделить память по этому указателю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 15:44 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryWhite Owl, но позже я могу выделить память по этому указателюи что? выделенная память не будет лежать в структуре. Память выделится в куче, что на размер структуры не скажется никоим образом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 16:06 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Мне уже пора..Спасибо, завтра буду разбираться в чём ошибаюсь. наконец сегодня появилось время на кино. Игра в имитацию очень понравилась C: Не смог удержаться и не рассказать, извините ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 16:07 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercuryWhite Owl, но позже я могу выделить память по этому указателюи что? выделенная память не будет лежать в структуре. Память выделится в куче, что на размер структуры не скажется никоим образом. Спасибо. Так и есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 16:09 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlДругое дело, если ты изначально собираешься сделать структуру с переменной длиной, тогда массив надо делать последним: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. а я не понял. T2 will_allocate_memory[ 0 ]; это как? с каких пор массив нулевой длины не является ошибкой компиляции? и откуда потом взялось N? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 16:20 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorych, это фича gcc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 16:29 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
RWolfэто фича gcc. Это все компиляторы умеют. Если не ошибаюсь даже в стандарт уже внесли. C++ как минимум ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 16:35 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychа я не понял. T2 will_allocate_memory[ 0 ]; это как? с каких пор массив нулевой длины не является ошибкой компиляции? В конце структуры позволяется. И предназначено как раз для целей, описанных White Owl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 16:36 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyegorychа я не понял. T2 will_allocate_memory[ 0 ]; это как? с каких пор массив нулевой длины не является ошибкой компиляции? В конце структуры позволяется. И предназначено как раз для целей, описанных White Owlда, немного погуглив, разобрался, спасибо за разъяснения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 16:41 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
а я правильно понимаю, что таковую структуру на стеке не разместишь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 16:48 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychа я правильно понимаю, что таковую структуру на стеке не разместишь?Почему же не разместишь? Запросто. только не забывай что sizeof(struct temp) == sizeof(T0)+sizeof(T2); То есть вполне можно сделать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 18:33 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White Owl, >> не забывай что sizeof(struct temp) == sizeof(T0)+sizeof(T2); Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. T1, а не T2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 18:38 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychWhite Owl, >> не забывай что sizeof(struct temp) == sizeof(T0)+sizeof(T2); Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. T1, а не T2?Да, конечно. Опечатался, прошу прощения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 19:04 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorych, На стеке: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 00:15 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyegorych, На стеке: Код: plaintext 1. 2. 3. 4. жёстко )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 01:38 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorych, Что, жестче чем malloc(sizeof(struct temp) + sizeof(T2)*N) ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 01:48 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyegorych, Что, жестче чем malloc(sizeof(struct temp) + sizeof(T2)*N) ? :)через union позаковырестей, чем malloc, всё же :)) А где используются такого рода извращения, интересно? и, мне кажется, что Код: plaintext 1. 2. 3. 4. если N - не константа, то это ведь нестандартное расширение гнуса, нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 10:02 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychесли N - не константа, то это ведь нестандартное расширение гнуса, нет? Это стандартное, но только в С. В С++ такого нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 11:52 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlegorychWhite Owl, >> не забывай что sizeof(struct temp) == sizeof(T0)+sizeof(T2); Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. T1, а не T2?Да, конечно. Опечатался, прошу прощения. а не Код: plaintext 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 15:15 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
А зачем вообще хранить структуру переменной длинны ? Где это можно применить, например ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 15:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Почему бы не хранить в таком случае указатель на память, где будет храниться необходимые нам данные разной мощности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 15:17 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury а не нет. SashaMercury Где это можно применить, например ? разбор пакетов, скажем: заголовок + данные переменной длины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 15:21 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
[quot RWolf]SS а не нет. почему нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 15:34 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryпочему нет ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 15:41 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
RWolf, и что ? эти 2 могут получиться разными путями. почему ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 15:43 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, не могут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 15:44 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
RWolf, тогда в данном случае это скорее сумма размеров T0 и T1. Объясните почему должна быть сумма T0 и T2, и почему в размере структуры не учитывается размер T1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 16:03 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, в посте так и написано: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 16:04 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorych , потому я и спросил по этому вопросу. T1 исправили на T2. White OwlegorychWhite Owl, >> не забывай что sizeof(struct temp) == sizeof(T0)+sizeof(T2); Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. T1, а не T2?Да, конечно. Опечатался, прошу прощения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 16:09 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryRWolf, тогда в данном случае это скорее сумма размеров T0 и T1. Объясните почему должна быть сумма T0 и T2, и почему в размере структуры не учитывается размер T1смотри, чё: 17252093 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 16:10 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryegorych , потому я и спросил по этому вопросу. T1 исправили на T2.наоборот, Т2 исправили на Т1, изначально вкралась опечатка. Правильный sizeof: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. sizeof( T2 ) не участвует в расчёте размера структуры, потому что мы говорим, что будет массив переменной длины, и, типа, мы сами-с-усами и зададим потом правильный размер. Компилятор говорит нам: Ок, теперь ты сам-себе-злобный-буратино, а я не буду учитывать размер последнего массива при расчёте размера структуры. Как то так мне это видится )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 16:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercuryegorych , потому я и спросил по этому вопросу. T1 исправили на T2.наоборот, Т2 исправили на Т1, изначально вкралась опечатка. Правильный sizeof: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. sizeof( T2 ) не участвует в расчёте размера структуры, потому что мы говорим, что будет массив переменной длины, и, типа, мы сами-с-усами и зададим потом правильный размер. Компилятор говорит нам: Ок, теперь ты сам-себе-злобный-буратино, а я не буду учитывать размер последнего массива при расчёте размера структуры. Как то так мне это видится )) Мне так и думалось. Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 16:22 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercuryegorych , потому я и спросил по этому вопросу. T1 исправили на T2.наоборот, Т2 исправили на Т1, изначально вкралась опечатка. Правильный sizeof: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. sizeof( T2 ) не участвует в расчёте размера структуры, потому что мы говорим, что будет массив переменной длины, и, типа, мы сами-с-усами и зададим потом правильный размер. Компилятор говорит нам: Ок, теперь ты сам-себе-злобный-буратино, а я не буду учитывать размер последнего массива при расчёте размера структуры. Как то так мне это видится )) sizeof(struct temp) не всегда равно sizeof(T0)+sizeof(T1), есть ещё выравнивание Такой вид структур-хаков довольно распространён. В дельфях, например, встроенные типы String, Array of имеют такую же структуру, это помогает избегать лишнего выделения памяти и наверное благоприятно сказывается на скорости, из-за того что данные в одном месте (кэш процессора не перегружается) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 06:18 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2015, 23:00 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. В Си отсутствует перегрузка функций ? (это относится к структурам, проектирую дерево, и возник такой вопрос). Почему отсутствует ? PS Марк, а хорошая статья. Читаю сейчас, нравится. Странно, у меня на столе лежит Цилькер, Орлов Организация ЭВМ и систем, и я почему-то не нашел у них про так называемое выравнивание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 09:30 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПочему отсутствует ?Потому, что компоновщик не понимает такого авангарда как одно имя у двух точек входа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 15:32 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. В Си отсутствует перегрузка функций ? (это относится к структурам, проектирую дерево, и возник такой вопрос). Почему отсутствует ? А для понимания этих вопросов надо читать Michael Scott, Programming Language Pragmatics. SashaMercuryPS Марк, а хорошая статья. Читаю сейчас, нравится. Странно, у меня на столе лежит Цилькер, Орлов Организация ЭВМ и систем, и я почему-то не нашел у них про так называемое выравниваниеА это кто такие? Мировой общественности эти имена не известны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 17:00 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСтранно, у меня на столе лежит Цилькер, Орлов Организация ЭВМ и систем, и я почему-то не нашел у них про так называемое выравнивание страница 80 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 17:09 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСтранно, у меня на столе лежит Цилькер, Орлов Организация ЭВМ Ну ты... дал джазу. У меня при слове ЭВМ начинается когнитивный диссонанс и раскаты смеха. Еще-бы написали "табулятор". Или счётная "машинка". Честно скажу я нечитал этих замечательных людей. Но сам факт заимствования терминологии из середины 20-го века доставляет. Ну да бох с ними. Вобщем обхохтался... Фух. Вобщем я за 30 секунд тебе нагуглил: Кури ключевые слова padding . http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 17:32 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВ Си отсутствует перегрузка функций ? (это относится к структурам, проектирую дерево, и возник такой вопрос). Почему отсутствует ? Basil A. SidorovПотому, что компоновщик не понимает такого авангарда как одно имя у двух точек входа. Никаких технических причин для этого нет. С++ например использует тот же компоновщик, и это не мешает ему иметь перегрузки. Единственная причина по которой в С нет перегрузок - это консервативность разработчиков языка, которые по максимуму охраняют синтаксис и простоту языка. И в принципе их можно понять. Снобизм вообще понятная штука )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 17:37 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyС++ например использует тот же компоновщик, и это не мешает ему иметь перегрузкиТолько потому, что компоновщику совершенно по барабану как именно компилятор задекорирует имя. Одно имя на две точки входа он (компоновщик) всё равно не умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 17:40 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyИ в принципе их можно понять. Снобизм вообще понятная штука )) Не снобизм. Это последовательность эволюции. Никто не ставил задачи впихнуть всё фишки в квази-ассемблер для Юникса. "С" на тот момент и так был прорывом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 17:42 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovТолько потому, что компоновщику совершенно по барабану как именно компилятор задекорирует имя. Одно имя на две точки входа он (компоновщик) всё равно не умеет. Так я и говорю. Линкер тут вообще не причем. Если компилятор захочет он найдет как организовать перегрузку. Но он не хочет )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 18:02 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mayton"С" на тот момент и так был прорывом. А я не про тот момент. Я про этот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 18:03 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonУ меня при слове ЭВМ начинается когнитивный диссонанс и раскаты смеха. Еще-бы написали "табулятор". Или счётная "машинка". Честно скажу я нечитал этих замечательных людей. Но сам факт заимствования терминологии из середины 20-го века доставляет. Ну да бох с ними ничего там страшного нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 18:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskymayton"С" на тот момент и так был прорывом. А я не про тот момент. Я про этот. А ну ОК. А почему только "С" ? Давайте поставим общий вопрос. Перегрузка операторов в современных ЯП. Прошлое. Настоящее. Будущее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 18:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mayton, Похоже на название топика в другом форуме )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 19:05 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
В программинге? Или в ПТ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 19:12 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonВ программинге? Или в ПТ? Это вопрос к модератору ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 19:18 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonА ну ОК. А почему только "С" ? Давайте поставим общий вопрос. Перегрузка операторов в современных ЯП. Прошлое. Настоящее. Будущее. может глобальнее поставить: зачем вообще нужна перегрузка операторов? Лично мне интересно. Побаловался с этой темой тыкаясь в С++, но как-то не заценил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 19:56 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dima T, подними новый тред в С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 20:14 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonА ну ОК. А почему только "С" ? Давайте поставим общий вопрос. Перегрузка операторов в современных ЯП. Прошлое. Настоящее. Будущее. может глобальнее поставить: зачем вообще нужна перегрузка операторов? Лично мне интересно. Побаловался с этой темой тыкаясь в С++, но как-то не заценил. странно, по-моему так достаточно очевидно: -- для того, чтобы не думать очень долго над названием функции -- для того, чтобы иметь возможность реализовывать user defined data types , встроенные в языке, и передумать для них разные операции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 20:17 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Изопропил, нашел :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 01:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
MasterZivDima Tпропущено... может глобальнее поставить: зачем вообще нужна перегрузка операторов? Лично мне интересно. Побаловался с этой темой тыкаясь в С++, но как-то не заценил. странно, по-моему так достаточно очевидно: -- для того, чтобы не думать очень долго над названием функции -- для того, чтобы иметь возможность реализовывать user defined data types , встроенные в языке, и передумать для них разные операции. Лично для меня, дело даже не в том чтобы подумать о названии функций, а в том, что на незачем создавать кучу функций с разными именами только из-за того, что у них разные параметры, поскольку смысловая нагрузка на функции сохраняется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 02:03 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЛично для меня, дело даже не в том чтобы подумать о названии функций, а в том, что на незачем создавать кучу функций с разными именами только из-за того, что у них разные параметры, поскольку смысловая нагрузка на функции сохраняетсяТы хочешь перегрузку функций в Си? Ну и запросто, объектное программирование никто не отменял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 02:36 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercuryЛично для меня, дело даже не в том чтобы подумать о названии функций, а в том, что на незачем создавать кучу функций с разными именами только из-за того, что у них разные параметры, поскольку смысловая нагрузка на функции сохраняетсяТы хочешь перегрузку функций в Си? Ну и запросто, объектное программирование никто не отменял. Ниже код на С++, с использованием перегрузки функций Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. как вы предлагает сделать аналогичное на Си ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 02:57 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Лучше так, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 02:59 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Марк, а что не так в слове ЭВМ ? Или ВМ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 04:02 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonДо кучи. Статья на тему http://tproger.ru/translations/art-of-structure-packing/ Однако, в этой работе есть ряд вопросов рассмотрен не полностью. 1. Применяется ли концевое заполнение в том случае, если после структуры располагается не элемент такого-же типа ? Вообще, концевое заполнение необходимо лишь в том случае, если объявляется массив структур 2. Смутили тривиальные предложения авторПрежде чем мы коснемся структур, следует упомянуть массивы скалярных величин. На платформе с выравниванием данных массивы char/short/int/long или указателей располагаются в памяти последовательно, без заполнения. 3. Тут возможно ошибка авторБитовые поля позволяют объявить переменные, занимающие меньшую, чем char память, вплоть до 1 бита. Например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Важно помнить, что они реализованы с помощью маски поверх байта или машинного слова и не могут выходить за его пределы. С точки зрения компилятора битовые поля структуры foo5 выглядят как двухбайтовые значения, из 16 бит которых используются только 12. Место после них заполняется так, чтобы размер структуры был кратен sizeof(short) — размеру наибольшего элемента. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Может быть вот так должно быть ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Сейчас конечно потестирую, но по концевому заполнению пояснено недостаточно чётко ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 07:06 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Точнее так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 07:07 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryWhite Owlпропущено... Ты хочешь перегрузку функций в Си? Ну и запросто, объектное программирование никто не отменял. Ниже код на С++, с использованием перегрузки функций Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. как вы предлагает сделать аналогичное на Си ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Правда сложно? Здесь никак не обойтись без перегруженных функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 07:23 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
По 3 пункту вопрос снят, всё ок. Мне кажется что с перегруженными функциями код выглядит логичнее. Вы усложнили алгоритм за счёт побочных операций, мне кажется, что это того не стоит. Хотя я конечно намного менее опытный, может быть позже соглашусь с такой точкой зрения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 07:45 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПо 3 пункту вопрос снят, всё ок. Мне кажется что с перегруженными функциями код выглядит логичнее. Вы усложнили алгоритм за счёт побочных операций, мне кажется, что это того не стоит. Хотя я конечно намного менее опытный, может быть позже соглашусь с такой точкой зрения а кто тебе мешает написать функцию с другим именем? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 08:19 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)SashaMercuryПо 3 пункту вопрос снят, всё ок. Мне кажется что с перегруженными функциями код выглядит логичнее. Вы усложнили алгоритм за счёт побочных операций, мне кажется, что это того не стоит. Хотя я конечно намного менее опытный, может быть позже соглашусь с такой точкой зрения а кто тебе мешает написать функцию с другим именем? Код: plaintext 1. SSMasterZivпропущено... странно, по-моему так достаточно очевидно: -- для того, чтобы не думать очень долго над названием функции -- для того, чтобы иметь возможность реализовывать user defined data types , встроенные в языке, и передумать для них разные операции. Лично для меня, дело даже не в том чтобы подумать о названии функций, а в том, что на незачем создавать кучу функций с разными именами только из-за того, что у них разные параметры, поскольку смысловая нагрузка на функции сохраняется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 08:36 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
А может кто-нибудь привести пример/частный случай, когда использование перегруженных функций хуже чем решения данного вопроса(примера) на языке Си (т.е. чем отсутствие перегрузки функций) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 08:39 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlПравда сложно? Здесь никак не обойтись без перегруженных функций.и теперь ты должен знать реализацию твоей createTreeNode(const char* w). Ведь по декларации функции не понятно, можно ли туда передавать NULL, и что будет, если его туда передать. В случае перегрузки createTreeNode(); и createTreeNode( const char *w ); код самодокументирован. Если бы ещё не w, а имя осмысленное дать параметру, и элементу структуры... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 09:51 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА может кто-нибудь привести пример/частный случай, когда использование перегруженных функций хуже чем решения данного вопроса(примера) на языке Си (т.е. чем отсутствие перегрузки функций) ?когда ты пишешь библиотеку на С++, которая использует С-интерфейс для экспортируемых функций )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 09:54 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dima Tможет глобальнее поставить: зачем вообще нужна перегрузка операторов? Лично мне интересно. Побаловался с этой темой тыкаясь в С++, но как-то не заценил. Код: plaintext 1. ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 09:56 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
w-word tn-TreeNode ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 10:07 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Я думал будет пример с арифметикой финансовых величин. P.S. А так ведь букв меньше. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 10:07 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychDima Tможет глобальнее поставить: зачем вообще нужна перегрузка операторов? Лично мне интересно. Побаловался с этой темой тыкаясь в С++, но как-то не заценил. Код: plaintext 1. ;-)) В фоксе еще удобнее: Код: plaintext 1. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 10:09 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonP.S. А так ведь букв меньше. Код: plaintext 1. Так еще меньше и быстрее работает Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 10:21 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonЯ думал будет пример с арифметикой финансовых величин. а я думал - комплексные числа - лучший кандидат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 10:24 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
ИзопропилmaytonЯ думал будет пример с арифметикой финансовых величин. а я думал - комплексные числа - лучший кандидат Я вовсе не против комплексных чисел. Просто поток заказов на разработку денежных расчётов встречается немного чаще IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 11:22 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryМарк, а что не так в слове ЭВМ ? Или ВМ Да нет ничего. Всё так. Можешь использовать. Просто оно (для меня) характеризует конкретную эпоху развития ВТ. Как для историка - ренессанс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 11:33 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonПросто поток заказов на разработку денежных расчётов встречается немного чаще IMHO. Для денежных расчетов в СУБД есть типы MONEY или CURRENCY. В С++ ничего такого штатного нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 11:54 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonP.S. А так ведь букв меньше. Код: plaintext 1. Код: plaintext 1. 2. 3. хотел ещё константу PI в строку ввернуть, но сдержался )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 12:03 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
ИзопропилmaytonЯ думал будет пример с арифметикой финансовых величин. а я думал - комплексные числа - лучший кандидатлучший кандидат - std::map::operator[], как ни крути. Тут уж примеры со всякими getValue() и т.п. точно рядом не стоят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 12:04 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychmaytonP.S. А так ведь букв меньше. Код: plaintext 1. Код: plaintext 1. 2. 3. хотел ещё константу PI в строку ввернуть, но сдержался )) Вот в этом месте я так понимаю константа Пи должна была просто меня размазать по стенке. Егорыч. Давай порассуждаем. Зачем нам вообще был предложен объект cout и набор левых угловых скобочек? Какую задачу он решил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 12:29 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЛично для меня, дело даже не в том чтобы подумать о названии функций, а в том, что на незачем создавать кучу функций с разными именами только из-за того, что у них разные параметры, поскольку смысловая нагрузка на функции сохраняется Ну, если бы ты только знал, как много времени тратится в огромном проекте на С только на то, чтобы придумать название для новой функции, порой 90% времени, затраченного на патч, уходит только на это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 14:02 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryкак вы предлагает сделать аналогичное на Си ? Код: plaintext 1. 2. И таких XXXFromYYYY потом появляется с 10 штук, так что потом ещё приходится добавлять и XXXFromYYYYWithZZZ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 14:37 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
MasterZiv, мне вот кажется, что нынешняя популярность всяческих замыканий связана с тем, что безымянным функциям по определению не нужно придумывать имя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 14:52 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
[quot mayton]egorych Код: plaintext 1. 2. 3. Егорыч. Давай порассуждаем. Зачем нам вообще был предложен объект cout и набор левых угловых скобочек? Какую задачу он решил?ну вот тебе С-вариант, например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. и где буковок меньше? ;-)) давайте только не будем представленную строку пытаться в один printf() зарядить, я знаю, что так можно, правда По сути, перегрузка операторов и функций - это синтаксический сахар, позволяющий писать более читабельный код, тратя на него меньше усилий. По моему скромному мнению задача решена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 15:27 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Тоесть если закрыть глаза на то что ты второй вариант написал в 7 строк то вобщем-то и разницы нет никакой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 15:49 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mayton, Разница большая. У printf есть неустранимый недостаток - там нужно указывать тип аргумента даже если компилятору он известен и для вывода значения не нужно ничего больше знать. Код: plaintext 1. 2. Я лично никак не могу запомнить какой формат у size_t. Каждый раз гадаю. Хотя по большому счету он там не нужен вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 16:14 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Про то, что можно перепутать порядок форматов я вообще молчу )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 16:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyПро то, что можно перепутать порядок форматов я вообще молчу )) Некоторые компиляторы это проверяют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 16:18 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
MasterZivSashaMercuryкак вы предлагает сделать аналогичное на Си ? Код: plaintext 1. 2. И таких XXXFromYYYY потом появляется с 10 штук, так что потом ещё приходится добавлять и XXXFromYYYYWithZZZВо первых, это не проблема. Те же glib/gtk живут и здравствуют. Во вторых, если тебе так уж хочется жить с одной функцией, ну перейди в объектную модель. Не пользуйся POD переменными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 17:19 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White Owlесли тебе так уж хочется жить с одной функцией, ну перейди в объектную модель. Не пользуйся POD переменными.на С? можно примерчик? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 17:50 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonТоесть если закрыть глаза на то что ты второй вариант написал в 7 строк то вобщем-то и разницы нет никакой?ну нет и нет. Не пиши через <<, что я могу сказать )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 17:52 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
RWolfMasterZiv, мне вот кажется, что нынешняя популярность всяческих замыканий связана с тем, что безымянным функциям по определению не нужно придумывать имя. Да, знаешь ли, там дофига чего ещё не надо, не только с именем проблема решается. Нормальные замыкания -- это как ... ну не знаю... как свечка от гемороя, столько проблем сразу решает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 17:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychWhite Owlесли тебе так уж хочется жить с одной функцией, ну перейди в объектную модель. Не пользуйся POD переменными.на С? можно примерчик? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. На самом деле это очень удобно использовать и очень несложно надстраивать. Из известных библиотек на этом принципе основаны Photon и IUP. Первое насквозь коммерческое (но писать под него сплошное удовольствие) а второе тут: http://iup.sourceforge.net/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 19:20 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlНа самом деле это очень удобно использовать и очень несложно надстраивать. Из известных библиотек на этом принципе основаны Photon и IUP. Первое насквозь коммерческое (но писать под него сплошное удовольствие) а второе тут: http://iup.sourceforge.net/ Ну бдсм тоже для кого-то сплошное удовольствие )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 19:30 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyWhite OwlНа самом деле это очень удобно использовать и очень несложно надстраивать. Из известных библиотек на этом принципе основаны Photon и IUP. Первое насквозь коммерческое (но писать под него сплошное удовольствие) а второе тут: http://iup.sourceforge.net/ Ну бдсм тоже для кого-то сплошное удовольствие ))Да, да... мы уже знаем что ты не умеешь писать на Си. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 19:58 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlДа, да... мы уже знаем что ты не умеешь писать на Си. Че это вдруг не умею? Умею. И даже пишу, когда нет возможности использовать С++ (на данный момент это только драйвера). Просто не вижу смысла писать на С с момента появления в С++ некоторого набора фич, которые позволяют писать код принципиально качественнее и быстрее. А конкретнее - смарт-указатели и исключения. То, что в С в принципе невозможно реализовать и то, что сокращает и упрощает код в десятки раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 20:19 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlНа самом деле это очень удобно использовать и очень несложно надстраивать.ты серьёзно? то есть, вместо Код: plaintext 1. 2. ты предлагаешь наплодить доп.структур и чудовищный switch? При том, что структуры тоже необходимо как то называть. Трудно не согласиться с Анатолием )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 22:14 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
С мне напоминает бюрократическое государство. Где у государства есть полная инфа про граждан, но оно все равно на каждый чих требует от них всевозможные справки, которые оно же и выдает. У некоторых граждан это создает иллюзию порядка и того что от этих справок что-то зависит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 22:48 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyWhite OwlДа, да... мы уже знаем что ты не умеешь писать на Си. Че это вдруг не умею? Умею. И даже пишу, когда нет возможности использовать С++ (на данный момент это только драйвера). Просто не вижу смысла писать на С с момента появления в С++ некоторого набора фич, которые позволяют писать код принципиально качественнее и быстрее. А конкретнее - смарт-указатели и исключения. То, что в С в принципе невозможно реализовать и то, что сокращает и упрощает код в десятки раз.Ну ты ж меня обвиняешь постоянно в неумении использовать С++... Вот наши неумения - явления одного порядка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 22:52 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlНу ты ж меня обвиняешь постоянно в неумении использовать С++... Вот наши неумения - явления одного порядка. Отличие в том что мое мнение объективно основано на ваших ответах в темам по С++. А ваше основано на обиде на мое мнение )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 23:06 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychWhite OwlНа самом деле это очень удобно использовать и очень несложно надстраивать.ты серьёзно?Да. Я серьезно. По существу все GUI библиотеки под Си используют один из двух подходов. Либо заводят множество функций на каждый тип объекта (glib, gtk), либо идут по пути создания структур с типом структуры в качестве первого члена и switch по ним (iup, photon). Попробовав оба, лично я предпочитаю второй (структуры и switch). Больше гибкости и намного проще в поддержке. egorychты предлагаешь наплодить доп.структур и чудовищный switch? При том, что структуры тоже необходимо как то называть.Посмотри на С++. Когда ты создаешь библиотеку классов, ты занимаешься тем-же самым. На практике, если мы зададимся целью написать аналогичные библиотеки решающие одну и ту-же задачу (на Си и С++), то количество структур будет точно равняться количеству классов. И switch будет совсем не чудовищный. При наследовании этот switch будет решать всего одно условие: это структура ребенок или нет? Если нет, то напрямую вызывать родительский метод. Да, это будет слегка медленнее чем подход с классами, потому что мы в рантайме будем определять какая именно это структура и какой из перегруженных методов надо вызывать, а с классами эти вопросы решатся еще на этапе компиляции. Зато подход со структурами и switch позволяет добавлять и изменять "классы" прямо во время рантайма. Можно переопределять скины прямо во время работы. Плагины писать - не просто легко, а очень легко. egorychТрудно не согласиться с Анатолием ))С ним легко не согласится. Достаточно просто на практике попробовать все парадигмы и увидеть их сильные и слабые стороны. А у Анатолия, к сожалению, нету широты взгляда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 23:17 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White Owlнету широты взгляда Сказал человек который считает что исключения зло )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 23:20 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskymayton, Разница большая. У printf есть неустранимый недостаток - там нужно указывать тип аргумента даже если компилятору он известен и для вывода значения не нужно ничего больше знать. Код: plaintext 1. 2. Я лично никак не могу запомнить какой формат у size_t. Каждый раз гадаю. Хотя по большому счету он там не нужен вообще. Та да. Пока С99 не добавил %z/%t, приходилось дефайнами разруливать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 00:25 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White Owl, >>Да, я серьёзно сознайся, ты специально делаешь вид, что наследование и перегрузка - это одно и то же, правда? ))) речь ведь шла о перегрузке функций вообще, и о перегрузке операторов, в частности ))) >>Зато подход со структурами и switch позволяет добавлять и изменять "классы" прямо во время рантайма. Можно переопределять скины прямо во время работы ну да, шаблоны "Стратегия" и "Состояние", в плюсах их реализация выглядит красивее, потому что в нём есть встроенные средства для решения подобных вопросов, а в С приходится извращаться, как ты это не называй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 00:47 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlДостаточно просто на практике попробовать все парадигмы и увидеть их сильные и слабые стороны.достаточно, действительно. Мой опыт мне говорит, что для объектной парадигмы лучше подходят языки, поддерживающие объектную парадигму ))) P.S. А то и Турбо-бэйсик можно языком системного программирования назвать, там ведь был доступ к прерываниям и прямой доступ в память ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 00:54 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychWhite Owl, >>Да, я серьёзно сознайся, ты специально делаешь вид, что наследование и перегрузка - это одно и то же, правда? ))) речь ведь шла о перегрузке функций вообще, и о перегрузке операторов, в частности )))Нет, это конечно не одно и то же, но это очень родственные вещи. Любая перегрузка функций это по существу наследование от некоего общего предка, не всегда явно обозначенного. Понимание этого факта позволяет делать перегруженные функции практически в любом языке, а не только в тех которые явно имеют синтаксис перегрузки. А что касается перегруженных операторов... Да, это в Си сделать не получится. egorych>>Зато подход со структурами и switch позволяет добавлять и изменять "классы" прямо во время рантайма. Можно переопределять скины прямо во время работы ну да, шаблоны "Стратегия" и "Состояние", в плюсах их реализация выглядит красивее, потому что в нём есть встроенные средства для решения подобных вопросов, а в С приходится извращаться, как ты это не называй.Расширенный синтаксис многое может сделать "красивее". Но дело то в том, что часто можно решить задачу и на более кратком синтаксисе. Получится не менее надежно и удобно, а красота это дело вкуса :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 01:17 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White Owl, >>Понимание этого факта позволяет делать перегруженные функции практически в любом языке, а не только в тех которые явно имеют синтаксис перегрузки. примерчик бы... твой пример про наследование не решает главной проблемы: отсутствия однотипных имён, о которых говорил MasterZiv, тебе всё одно придётся явно называть структуры, и вместо одной головной боли ты предлагаешь добавить сразу 7 ))) >>Расширенный синтаксис многое может сделать "красивее". Но дело то в том, что часто можно решить задачу и на более кратком синтаксисе. Получится не менее надежно и удобно, а красота это дело вкуса :) не согласен, не получится "не менее надёжно и удобно". Не в "красоте" ведь дело. Если мне не надо изобретать из раза в раз таблицу виртуальных функций, то я, во первых, не ошибусь в её реализации, и, во вторых, мой код не будет загромождён ненужными рутинными подробностями, которые отлично может написать за меня компилятор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 01:34 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychWhite OwlДостаточно просто на практике попробовать все парадигмы и увидеть их сильные и слабые стороны.достаточно, действительно. Мой опыт мне говорит, что для объектной парадигмы лучше подходят языки, поддерживающие объектную парадигму ))) Неверно. Опыт тебе должен говорить: Использовать объектную парадигму легче на языках поддерживающих объектный синтаксис. А так, объектную парадигму можно применить практически к любому языку. Так же как и любую другую парадигму, к любому языку. В одних случаях это будет легче, в других сложнее, но .... парадигма это парадигма. egorychP.S. А то и Турбо-бэйсик можно языком системного программирования назвать, там ведь был доступ к прерываниям и прямой доступ в память ;-))Это надо понимать что ты не видел системных программ написанных на Quick BASIC (который брат-близнец TB, но от Микрософта)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 01:36 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlЛюбая перегрузка функций это по существу наследование от некоего общего предка, не всегда явно обозначенного. Понимание этого факта позволяет делать перегруженные функции практически в любом языке, а не только в тех которые явно имеют синтаксис перегрузки. А можно пример? Вот код на С++: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Это перегрузка функции print двумя типами аргумента. Как с помощью понимания того что перегрузка это "наследование от некоего общего предка" сделать такую перегруженную функцию не на любом языке, а хотя бы на С? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 01:49 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
MasterZivSashaMercuryкак вы предлагает сделать аналогичное на Си ? Код: plaintext 1. 2. И таких XXXFromYYYY потом появляется с 10 штук, так что потом ещё приходится добавлять и XXXFromYYYYWithZZZ :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:05 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Я плохо понял что предлагает сделать White Owl, возможно когда увижу ответ по примеру BS/Анатолия пойму. Но как я понял предполагается добавление искусственных структур, и локальное усложнение программы. Потому вот такой вопрос. Да, локально у нас что-то усложняется, но в цельной программе, насколько это будет органично ? Отличаются ли способ Си, и перегрузка на С++ по части быстродействия ? Предполагаю, что на С++будет тратится время на выбор функций из всех возможных. На Си такого вроде-бы не должно возникать. Может быть ещё что-то не так. И вот такой вопрос. Какие минусы при использовании перегрузки функций ? Сколько функций максимум можно перегружать одним именем ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:12 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White Owl, >>Неверно. Опыт тебе должен говорить: Использовать объектную парадигму легче на языках поддерживающих объектный синтаксис.ну, это софистика уже пошла. >>А так, объектную парадигму можно применить практически к любому языку. эмулировать можно, где то лучше, где то хуже. Можно даже назвать это "я пишу в объектном стиле", а я это называю: "я умею строить вон какие крутые костыли" >>Это надо понимать что ты не видел системных программ написанных на Quick BASIC я и игры на бэйсике видел, не об этом ведь речь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:15 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, >>Предполагаю, что на С++будет тратится время на выбор функций из всех возможных. с какой стати? внутреннее имя у каждой из этих функций - разное ведь. Об этом заботится компилятор, а не программист. В этом удобство то заключается. >>Сколько функций максимум можно перегружать одним именем ? до тех пор, пока не иссякнет фантазия в изобретении разных сигнатур для этого имени, то есть, теоретически, бесконечно )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:19 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryОтличаются ли способ Си, и перегрузка на С++ по части быстродействия ? Предполагаю, что на С++будет тратится время на выбор функций из всех возможных Не отличается. Не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:20 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНе отличается. Не будет. Точнее, тот костыль, который приведет White Owl, он конечно будет отличаться от С++ по скорости. В худшую сторону )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:22 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychWhite Owl, >>Понимание этого факта позволяет делать перегруженные функции практически в любом языке, а не только в тех которые явно имеют синтаксис перегрузки. примерчик бы... твой пример про наследование не решает главной проблемы: отсутствия однотипных имён, о которых говорил MasterZiv, тебе всё одно придётся явно называть структуры, и вместо одной головной боли ты предлагаешь добавить сразу 7 ))) Почему не решает? Очень даже решает. Просто расширь пример из 17283801 до полноценного наследования, добавь в нужные структуры указатели на функции и получишь почти полную копию С++. Посмотри на IUP хотя бы. Там есть практически один единственный тип данных IupHandle*. Конкретные объекты создаются через IupFrame(), IupButton(), IupMenu(), etc. А дальше опять одна единственная функция IupSetAttribute(IupHandle*, ....); И вся палитра виджетов покрывается этим набором. egorych>>Расширенный синтаксис многое может сделать "красивее". Но дело то в том, что часто можно решить задачу и на более кратком синтаксисе. Получится не менее надежно и удобно, а красота это дело вкуса :) не согласен, не получится "не менее надёжно и удобно". Не в "красоте" ведь дело. Если мне не надо изобретать из раза в раз таблицу виртуальных функций, то я, во первых, не ошибусь в её реализации, и, во вторых, мой код не будет загромождён ненужными рутинными подробностями, которые отлично может написать за меня компилятор.Тоже не совсем верно. Ты будешь делать таблицу функций только на "своем" уровне. Не забывай про наследование. Да, в С++ за тебя это компилятор сделает, а в Си надо будет в конструкторе самостоятельно наполнить эту таблицу. Но это единственная сложность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:23 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyWhite OwlЛюбая перегрузка функций это по существу наследование от некоего общего предка, не всегда явно обозначенного. Понимание этого факта позволяет делать перегруженные функции практически в любом языке, а не только в тех которые явно имеют синтаксис перегрузки. А можно пример? Вот код на С++: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Это перегрузка функции print двумя типами аргумента. Как с помощью понимания того что перегрузка это "наследование от некоего общего предка" сделать такую перегруженную функцию не на любом языке, а хотя бы на С? 17283801 В данном случае общий предок это "некая переменная". Ну вот и сделай себе абстрактную переменную. Это будет конечно чуть сложнее чем с POD типами, но не намного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:27 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Странно, BS на 192 странице (7.4) говорит о том что происходит некий процесс поиска подходящей функции. Да и это логично ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:27 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlТам есть практически один единственный тип данных IupHandle*. Конкретные объекты создаются через IupFrame(), IupButton(), IupMenu(), etc. А дальше опять одна единственная функция IupSetAttribute(IupHandle*, ....);так и вижу, как я пишу функции вида: IupEmptyFrame(), IupFrameWithHeader(), IupFrameWithDoubleBorder(), IupFrameWithHeaderAndDoubleBorder()... потому что это понятней всё же, чем Код: plaintext 1. 2. 3. 4. 5. разбросанные по всему коду ровным слоем. Бррр! )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:34 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlВ данном случае общий предок это "некая переменная". Ну вот и сделай себе абстрактную переменную. Это будет конечно чуть сложнее чем с POD типами, но не намного. А можете привести код вызывающий такую функцию с двумя разными типами, чтобы мы увидели насколько это "не намного сложнее", когда вместо передачи числа или строки создается, а после вызова удаляется объект? Также не совсем понятно как перегрузка разным количеством аргументов реализуется с помощь. наследования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:43 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychWhite Owl, >>Неверно. Опыт тебе должен говорить: Использовать объектную парадигму легче на языках поддерживающих объектный синтаксис. ну, это софистика уже пошла.А вот тут я бы тебе предложил заглянуть в словарь, с целью узнать значение слова "софизм". А вот то что ты допустил паралогизм играясь с тавтологией это без сомнения. egorych>>А так, объектную парадигму можно применить практически к любому языку. эмулировать можно, где то лучше, где то хуже. Можно даже назвать это "я пишу в объектном стиле", а я это называю: "я умею строить вон какие крутые костыли" И? Одно другому не мешает. Вопрос же был: возможно ли это? Ответ: да возможно. И эти костыли не такие уж крутые. Ты бы посмотрел как объектность достигается в Rexx, особенно как это внутри организовано... Вот там это действительно восхищение вызывает! egorych>>Это надо понимать что ты не видел системных программ написанных на Quick BASIC я и игры на бэйсике видел, не об этом ведь речьПовторюсь: Вопрос же был: возможно ли это? Ответ: да возможно. Так что да, Turbo Basic это тоже язык системного программирования. Если из ЯП можно добраться до функций ОС - это язык годный для системного программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:45 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСтранно, BS на 192 странице (7.4) говорит о том что происходит некий процесс поиска подходящей функции. Да и это логично Да при компиляции происходит поиск имен. Это занимает микросекунды. Т.е. по сути не влияет на скорость компиляции. При связывании скорость поиска не зависит от перегрузки, т.к. каждая перегрузка дает отдельное имя. А при выполнении имен вообще нет, есть только адреса, которые вообще не надо искать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:49 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryСтранно, BS на 192 странице (7.4) говорит о том что происходит некий процесс поиска подходящей функции. Да и это логично Да при компиляции происходит поиск имен. Это занимает микросекунды. Т.е. по сути не влияет на скорость компиляции. При связывании скорость поиска не зависит от перегрузки, т.к. каждая перегрузка дает отдельное имя. А при выполнении имен вообще нет, есть только адреса, которые вообще не надо искать. а, в С++ статическая типизация как и в Си, верно ?) Т.е. это влияет только на скорость компиляции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 02:52 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyWhite OwlВ данном случае общий предок это "некая переменная". Ну вот и сделай себе абстрактную переменную. Это будет конечно чуть сложнее чем с POD типами, но не намного. А можете привести код вызывающий такую функцию с двумя разными типами, чтобы мы увидели насколько это "не намного сложнее", когда вместо передачи числа или строки создается, а после вызова удаляется объект?Мне уже лень писать очевидный код. Повторяю ссылку: http://iup.sourceforge.net/ Библиотека построенная именно по принципу наследования структур. Там есть и примеры, и исходники и все что угодно. И она уже вылизанная и без синтаксических ошибок. А то знаю я вас, опечатаюсь где-нибудь, а в ответ сразу прилетит: "Этот метод не работает!" Anatoly MoskovskyТакже не совсем понятно как перегрузка разным количеством аргументов реализуется с помощь. наследования.Через эллипсис конечно. Да, ошибки компилятор не отловит, но в рантайме можно все очень просто сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 03:02 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychWhite OwlТам есть практически один единственный тип данных IupHandle*. Конкретные объекты создаются через IupFrame(), IupButton(), IupMenu(), etc. А дальше опять одна единственная функция IupSetAttribute(IupHandle*, ....);так и вижу, как я пишу функции вида: IupEmptyFrame(), IupFrameWithHeader(), IupFrameWithDoubleBorder(), IupFrameWithHeaderAndDoubleBorder()... потому что это понятней всё же, чем Код: plaintext 1. 2. 3. 4. 5. разбросанные по всему коду ровным слоем. Бррр! ))))То есть тебе больше по душе метод примененный в GLIB/GTK+? Ну Ок. Называется от чего ушли, к тому пришли :) Но эта парадигма тоже вполне рабочая и прекрасно живущая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 03:04 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlЧерез эллипсис конечно. Да, ошибки компилятор не отловит, но в рантайме можно все очень просто сделать. И передавать число аргументов? Без этого ... не работает. Я правильно понимаю? Чтобы на С писать программы с уровнем абстракции выше ассемблера, надо реализовать в проекте свой вариант эмуляции динамической типизации. Так а зачем нужен С тогда? Пишите сразу на Перле или Питоне каком-нибудь - там все это готовое уже, и скорость будет такая же, если не лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 03:23 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Прошу прощение, у меня тут возник вопрос по теме топика. Написал программу (взял у K&R) собирающую все слова в файле с подсчётом появлений. Использую бинарное дерево Код: plaintext 1. 2. 3. 4. 5. 6. 7. И такие функции: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 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. Такой код обрабатывает файл Код: plaintext 1. 2. 3. 4. 5. 6. Функций retree мне не нравится, думаю что проблема в ней. Но она приведена у K&R, потому возможно с ней всё в порядке. Подскажите пожалуйста, в чём я ошибаюсь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 04:07 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
И ещё у меня вопрос по соседнему топику, но там я не могу отправить сообщение. Не знаю почему. Объекты объявленные в теле цикла являются автоматическими, это так. И потому они действительно должны автоматически уничтожиться, не вызывая утечек. Но как это должно наверняка происходить в цикле ? 1. Либо, как говорит Анатолий (возможно это соответствует стандарту), на каждой итерации цикла будет создаваться новый объект, путь даже по тому-же адресу 2. Либо объект будет создан один раз, и уничтожится после завершения всех итераций цикла (о чём говорил Дмитрий, и что логичнее). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 04:13 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 06:19 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Заработало, не заметил. Спасибо ) Только так исправил Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 06:33 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White Owl, >>Вопрос же был: возможно ли это? Ответ: да возможно. так с этим то как раз никто не спорит. С помощью волшебных костылей можно всё. Спор ведётся о том, нужно ли :) Ведь есть инструмент, который позволяет обсуждаемое из-коробки, так зачем нужны все эти извращения? Вот чего я понять до сих пор не могу )) >>То есть тебе больше по душе метод примененный в GLIB/GTK+? мне по душе метод, применённый в С++. Хочешь писать в объектном стиле - бери язык с поддержкой ООП :) >>Называется от чего ушли, к тому пришли :) это называется, что так и не ушли, а просто переместили проблему уровнем выше, ничего, по сути, не решив :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 09:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Я читал... думал... снова читал. Слушайте... а почему вы сравниваете два абсолютно разных языка? Вы бы ещё Дельфи с Питоном сравнивали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 13:12 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
jmp_originalСлушайте... а почему вы сравниваете два абсолютно разных языка? Какие же они разные, если все вот эти С-шные костыли можно просто взять и не меняя ни строчки кода использовать в С++ коде (ну предположим что найдутся извращенцы, которые имея С++ буду писать на нем в стиле С) ? :) jmp_originalВы бы ещё Дельфи с Питоном сравнивали. А тут - да. Несравнимо. Дельфи-то вообще не язык ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 13:51 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, 1) Можно. Даже, наверное, находятся. Только это всё равно будет PureC, а не. 2) Хорошо, Паскаль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 14:02 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
jmp_original2) Хорошо, Паскаль. Я другое имел в виду когда говорил "не язык" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 14:09 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЯ другое имел в виду когда говорил "не язык" как там было о снобизме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 14:23 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychкак там было о снобизме? Одно дело, когда отвечаешь на чистый флейм, другое дело когда на полном серьезе даются советы )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 15:12 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyjmp_originalСлушайте... а почему вы сравниваете два абсолютно разных языка? Какие же они разные, если все вот эти С-шные костыли можно просто взять и не меняя ни строчки кода использовать в С++ коде (ну предположим что найдутся извращенцы, которые имея С++ буду писать на нем в стиле С) ? :) Возможно ноги растут от интеграции другими средами или рантаймами или технологиями. Обычно С-исходник проще вызывается из через JNI, Remoting. Или прочие техники маршалинга-сериализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 16:44 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonОбычно С-исходник проще вызывается из через JNI, Remoting. Или прочие техники маршалинга-сериализации. Проще чем что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 17:28 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Толик не придирайся. Ты прекрасно понял чем что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 18:36 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЯ правильно понимаю? Чтобы на С писать программы с уровнем абстракции выше ассемблера, надо реализовать в проекте свой вариант эмуляции динамической типизации.Не передергивай. Можно писать ОО на Си даже со статической типизацией, но вот ее уже надо будет делать вручную. Она конечно будет потом оптимизирована вплоть до отсутствия кода, но в исходнике ее надо будет самому писать. Пример: GTK+ с его функциями вида GTK_WIDGET(). С динамической типизацией проще. egorych>>Вопрос же был: возможно ли это? Ответ: да возможно. так с этим то как раз никто не спорит. С помощью волшебных костылей можно всё. Спор ведётся о том, нужно ли :) Ведь есть инструмент, который позволяет обсуждаемое из-коробки, так зачем нужны все эти извращения? Вот чего я понять до сих пор не могу ))Нет. О том "нужно оно или нет" вопрос в этом топике, вплоть до поста на который я сейчас отвечаю, еще не поднимался. Anatoly MoskovskymaytonОбычно С-исходник проще вызывается из через JNI, Remoting. Или прочие техники маршалинга-сериализации. Проще чем что? Проще чем всё. Межязыковое взаимодействие с Си намного проще чем с любым другим языком. За исключением ассемблера конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 18:40 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonТолик не придирайся. Ты прекрасно понял чем что. White OwlПроще чем всё. Межязыковое взаимодействие с Си намного проще чем с любым другим языком. За исключением ассемблера конечно. Ну видите. Далеко не всем понятно, не только проще чем что, но и вообще что проще. Мне например совершенно не понятно проще чем что JNI, которое является одной из самых технически сложных для применения технологий межъязыкового взаимодействия. И уж точно не проще прямого С-шного синтаксиса при вызове внешних библиотек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 18:45 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskymaytonТолик не придирайся. Ты прекрасно понял чем что. White OwlПроще чем всё. Межязыковое взаимодействие с Си намного проще чем с любым другим языком. За исключением ассемблера конечно. Ну видите. Далеко не всем понятно, не только проще чем что, но и вообще что проще. Мне например совершенно не понятно проще чем что JNI, которое является одной из самых технически сложных для применения технологий межъязыкового взаимодействия. И уж точно не проще прямого С-шного синтаксиса при вызове внешних библиотек.И с чем ты тут не согласен? JNI это протокол взаимодействия Java с внешними (не Java) модулями. JNI не прост, согласен. Но JNI поверх Си проще чем JNI поверх С++. Но кроме Си и С++, через JNI можно вызывать процедуру вообще на любом языке. Это будет намного сложнее, и часто "да проще повесится", но это возможно. И это относится не только к Java c JNI, но и к любому другому языку. А так как люди обычно идут по пути наименьшего сопротивления, то они и берут Си, если в дальнейшем потребуется связывать свои модули с чужими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 19:08 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlО том "нужно оно или нет" вопрос в этом топике, вплоть до поста на который я сейчас отвечаю, еще не поднимался.подразумевался, я думал, это понятно, но оказался невнятен, прошу прощения )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 19:17 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlНо JNI поверх Си проще чем JNI поверх С++ Т.е. речь шла не про JNI а про то что JNI+C против JNI+C++? С этим я согласен, что JNI+C++ немного сложнее, за счет того что нельзя сгенерить декларации native сразу в С++ стиле, и приходится делать С-шные обертки над С++ кодом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 19:38 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЯ другое имел в виду когда говорил "не язык" Там нет тернарного оператора? ))) Не, не, я знаю, знаю! Там нельзя написать A = B = C ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 19:47 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
jmp_original, залогонься товарищ! Будь джентльменом! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 19:56 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mayton, чес слово, мне лень восстанавливать пароль (я его потом снова забуду). Тем более что последний раз я писал зарегенным года 4 назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 11:04 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
jmp_originalя его потом снова забудусдаю лучший пароль в мире: "777", очень сложно забывается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 11:56 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychсдаю лучший пароль в мире: "777", очень сложно забывается не, лучше Pa$$w0rd один раз запомнил и можно пользоваться даже там где админы маньяки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 12:04 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Это мысль. Pa$$w0rd может быть получен через pwdgen 8 + несоколько фильтров. 1) Uppercase для (1) символа. 2) Замена "s"=>"$" 3) Замена "o"=>"0" сюда же до кучи можно добавить опциональные замены "a"=>"@" и прочие популярные хитрости. Подумаю вечером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 18:48 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonЭто мысль. Pa$$w0rd может быть получен через pwdgen 8 + несоколько фильтров. 1) Uppercase для (1) символа. 2) Замена "s"=>"$" 3) Замена "o"=>"0" сюда же до кучи можно добавить опциональные замены "a"=>"@" и прочие популярные хитрости. Подумаю вечером.и "Р" ещё можно русскую подставить, или "а" ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 18:51 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Ну... русскую Р при вводе пассворда вряд-ли будут переключать. Чисто технически к примеру при входе в BIOS или HDD под Cryptix у вас нет доступа к национальным кодировкам. А вот замена на созвучные или на ассоциативные буквы - это мысль. Причём генерация значительно проще. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 19:03 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonЭто мысль. Pa$$w0rd может быть получен через pwdgen 8 + несоколько фильтров. Не в ту сторону думаешь. Это пароль для злобного админа ресурса где лично мне терять нечего, я как пользователь делать ничего не могу, но от меня требуют чтобы в пароле были большие и маленькие буквы, цифры и небуквенные символы в общем количестве не менее 8 штук. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 20:57 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
и тут свой генератор вспомнил :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2015, 04:04 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White Owlegorychа я правильно понимаю, что таковую структуру на стеке не разместишь?Почему же не разместишь? Запросто. только не забывай что sizeof(struct temp) == sizeof(T0)+sizeof(T1); То есть вполне можно сделать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. А можно ли определить количество элементов в массиве из таких структур ? Правильно ли я понимаю что нельзя ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2015, 04:12 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА можно ли определить количество элементов в массиве из таких структур ? Правильно ли я понимаю что нельзя ?Это обычный динамический массив, только дополненный спереди какими-то полями с жестко заданным размером. Так что и ответ на вопрос "сколько мы там памяти под это выделили?" делается точно так же как и с обычным выделением на куче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2015, 05:48 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Какую, на ваш взгляд, структуру данных лучше всего использовать для CRUD операций с лексемами при лексическом анализе кода на языке Си? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 08:54 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryдля CRUD операций с лексемами при лексическом анализе кода на языке Си? Тут нужно ТЗ писать страниц на 10. Или думаешь все твои мысли читают? Что за ГРУД-операции с лексемами? Ни пса нипонять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 09:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Здесь имеется ввиду что данная структура данных должна быть удобна для чтения лексем, добавления в облако лексем, удаления из этой структуры, и изменения (изменение потребуется в будущем). Здесь использовал термин СУБД (create read update delete) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 09:29 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдесь имеется ввиду что данная структура данных должна быть удобна для чтения лексем, добавления в облако лексем, удаления из этой структуры, и изменения (изменение потребуется в будущем). Здесь использовал термин СУБД (create read update delete) Может СУБД использовать? sqlite например. Или почитай как в SQL серверах хранение данных организовано. В книжках про MSSQL (возможно по другим тоже) обычно подробно расписывают как данные физически хранятся и как к ним доступ происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 09:37 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. Какую, на ваш взгляд, структуру данных лучше всего использовать для CRUD операций с лексемами при лексическом анализе кода на языке Си?лучше всего использовать ту структуру, которая лучше всего подходит для решения задачи ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 10:49 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dima T, при чём тут СУБД ? Я просто пояснил по термину CRUD. Мне кажется что лучше использовать дерево ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 15:23 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryDima T, при чём тут СУБД ? Я просто пояснил по термину CRUD. Я к тому что хранение данных в СУБД заточено на то чтобы CRUD работал быстро. Там в т.ч. и деревья используются. Основная проблема будет в использовании памяти, борьба с тормозами из-за выделения/перевыделения. В STL есть <map> и <set> может они подойдут. По-хорошему maytonТут нужно ТЗ писать страниц на 10. Или думаешь все твои мысли читают? накидай хотя бы мини ТЗ, а то смутно представляется что ты там изобретаешь и для чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 16:20 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдесь имеется ввиду что данная структура данных должна быть удобна для чтения лексем, добавления в облако лексем, удаления из этой структуры, и изменения (изменение потребуется в будущем). Здесь использовал термин СУБД (create read update delete) Сколько штук лексем предполагается хранить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 18:31 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercuryЗдесь имеется ввиду что данная структура данных должна быть удобна для чтения лексем, добавления в облако лексем, удаления из этой структуры, и изменения (изменение потребуется в будущем). Здесь использовал термин СУБД (create read update delete) Сколько штук лексем предполагается хранить? Здравствуйте. Столько, сколько лексем в одной среднестатистической программе. Я не знаю ответ на этот вопрос, но полагаю порядка 10^7 лексем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 09:13 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. У меня попутно возник вопрос по графам (предыдущий вопрос не закрыт, вернусь к нему позже). Диомидис Спинеллис пишет о том, что вершины графа есть смысл хранить в двусвязном списке. Вы делаете так-же? Список, как я пронимаю, требуется в случае динамического добавления узлов графа(иначе он тут, по-моему, не нужен). Почему интерфейс структуры содержит указатель на поле n_next предыдущего узла, а не адрес предыдущего узла ? Почему имя этого узла имеет тип данных массив char мощностью 1, а не символьный тип ? Мне почему-то не очень нравится эта реализация. Есть ли оптимальная реализация? Если это возможно, приведите пример того, как вы реализовывали(в своих программах) интерфейс для графа или как бы вы его реализовали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 09:31 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПочему имя этого узла имеет тип данных массив char мощностью 1, а не символьный тип?глубоко не вчитывался в текст, но, наверное, тут имеется ввиду этот кейс: 17247709 кстати, в С нет символьного типа, если вдруг чё )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 10:03 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercuryПочему имя этого узла имеет тип данных массив char мощностью 1, а не символьный тип?глубоко не вчитывался в текст, но, наверное, тут имеется ввиду этот кейс: 17247709 кстати, в С нет символьного типа, если вдруг чё )) ISO/IEC 9899:201x ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 10:10 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
ой, я не хотел смеющийся смайл, это были глаза и три улыбки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 10:11 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Да, вероятно так. Спасибо :) Я про это забыл, тогда лучше бы сделали char name[0], было бы проще понять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 10:14 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДа, вероятно так. Спасибо :) Я про это забыл, тогда лучше бы сделали char name[0], было бы проще понятьвероятно, на момент написания книги конструкции char name[0] не было в стандарте, или в компиляторе, которым пользовался автор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 12:06 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryISO/IEC 9899:201xcalled то они called, но по сути это целые между short и int. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 12:09 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercuryISO/IEC 9899:201xcalled то они called, но по сути это целые между short и int. целые, конечно. Вот рисунок согласно стандарту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 16:05 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryцелые, конечно.значит - нет символьного типа в С ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 16:43 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercuryцелые, конечно.значит - нет символьного типа в С ;-)) согласно стандарту есть: ))) Число 3 натуральное, но кроме-того оно простое, и целое ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 17:05 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
На этом вырвиглазном рисунке float отмечен как object type. Это чё вообще за хрено-канитель такая. Пионеры почитают твой рисунок и поверят в него как в луркмоар или википедию и пойдут блджад сдавать лабу. И тут-то к ним подкрадётся белая полярная лиса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 17:31 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. У меня попутно возник вопрос по графам (предыдущий вопрос не закрыт, вернусь к нему позже). Диомидис Спинеллис пишет о том, что вершины графа есть смысл хранить в двусвязном списке. Вы делаете так-же? Свойство графа номер 1: у графа есть некоторое количество (от нуля до бесконечности) вершин. Свойство графа номер 2: каждая вершина графа может иметь от нуля до бесконечности связей с любой другой вершиной (включая саму себя). Свойство графа номер 3: каждая связь имеет строго два конца прикрепленных к вершинам. Связь может быть ненаправленной, одно- или дву-направленной. Спрашивается: какая структура данных может хранить граф? Саша, перестань читать странные книжки, начни думать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 17:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДиомидис Спинеллис пишет о том, что вершины графа есть смысл хранить в двусвязном списке. Вершины графа не имеет смысла хранить вообще, поскольку у них обычно нет аттрибутов кроме номера. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 18:02 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovSashaMercuryДиомидис Спинеллис пишет о том, что вершины графа есть смысл хранить в двусвязном списке. Вершины графа не имеет смысла хранить вообще, поскольку у них обычно нет аттрибутов кроме номера. Читай учебник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 18:04 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryсогласно стандарту есть: ))) Число 3 натуральное, но кроме того оно простое, и целое )но не символ. Другое дело, что есть символы, которыми можно написать число 3, но ни один из них невозможно хранить в типе char, хоть signed, хоть unsigned )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 20:30 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonНа этом вырвиглазном рисунке float отмечен как object type. Это чё вообще за хрено-канитель такая. Пионеры почитают твой рисунок и поверят в него как в луркмоар или википедию и пойдут блджад сдавать лабу. И тут-то к ним подкрадётся белая полярная лиса... тот рисунок практически(по причине вашего замечания) полностью соответствует стандарту. В скобках написано basic. Выше видимо не дописал, должно быть complete object types. Хотя правильно наоборот. basic types (complete object types) Спасибо что заметили C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 02:01 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
А что за белая полярная лиса ? Это откуда ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 02:02 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercuryЗдравствуйте. У меня попутно возник вопрос по графам (предыдущий вопрос не закрыт, вернусь к нему позже). Диомидис Спинеллис пишет о том, что вершины графа есть смысл хранить в двусвязном списке. Вы делаете так-же? Свойство графа номер 1: у графа есть некоторое количество (от нуля до бесконечности) вершин. Свойство графа номер 2: каждая вершина графа может иметь от нуля до бесконечности связей с любой другой вершиной (включая саму себя). Свойство графа номер 3: каждая связь имеет строго два конца прикрепленных к вершинам. Связь может быть ненаправленной, одно- или дву-направленной. Спрашивается: какая структура данных может хранить граф? Саша, перестань читать странные книжки, начни думать. Вы исходите из свойств графа, но у меня в голове преобладают задачи. 0. Вершина графа должна хранить не только уникальное поле, но и другие аттрибуты 1. Необходимо за минимальное время добавлять новую вершину графа 2. Необходимо за минимальное время получать информацию о любой вершине графа 3. Необходимо за минимальное время добавить новую связь в графе 4. Необходимо за минимальное время получить множество вершин с которыми данная вершина имеет связь и узнать информацию о этой связи(длина, время) 5. Не знаю есть ли смысл быстро удалять вершины и связи Мне хочется хранить весь граф в одном 'облаке'. Это интуитивное определение. Но чтобы это облако реализовать, исходя из свойств и задач для графа, требуется список вершин (двусвязный), и какая-то динамическая, удобная по скорости(но не факт что в реализации и в использовании), структура для списка ребер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 02:54 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Кстати. Расскажите пожалуйста как вы используете графы в своей жизни(т.е. в каких задачах они встречались у вас ). У меня в голове крутится только задача Коммивояжера . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 02:56 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryРасскажите пожалуйста как вы используете графы в своей жизни(т.е. в каких задачах они встречались у вас ). У меня в голове крутится только задача Коммивояжера .. Игровое ИИ. Нахождение кратчайшего пути из точки А в точку Б на карте произвольной сложности. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 11:39 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovSashaMercuryРасскажите пожалуйста как вы используете графы в своей жизни(т.е. в каких задачах они встречались у вас ). У меня в голове крутится только задача Коммивояжера .. Игровое ИИ. Нахождение кратчайшего пути из точки А в точку Б на карте произвольной сложности. Как там щас наверху (в игровом мире) ? Я думал бьют на кубики и ищут "волной". Не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 12:26 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 12:27 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВы исходите из свойств графа, но у меня в голове преобладают задачи.Обрати внимание на эти свои слова. У нас с тобой разные цели. У кого-то другого будет третья цель... и так далее. Вывод? Структура хранения графа которую выберу я не обязательно будет совпадать со структурой которую выберешь и ты, и со структурой которую выбрал автор книги которая тебя смутила. При этом все три структуры будет абсолютно правильными потому что будут преследовать разные цели. SashaMercuryисходя из свойств и задач для графа, требуется список вершин (двусвязный), и какая-то динамическая, удобная по скорости(но не факт что в реализации и в использовании), структура для списка реберНу и? Ты уже ответил на 60% вопроса. Ты уже догадался что вершины и ребра удобно хранить по отдельности. И уже знаешь как будешь хранить вершины. Теперь еще придумай как хранить ребра и вся задача будет решена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 17:45 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2015, 22:26 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercuryВы исходите из свойств графа, но у меня в голове преобладают задачи.Обрати внимание на эти свои слова. У нас с тобой разные цели. У кого-то другого будет третья цель... и так далее. Вывод? Структура хранения графа которую выберу я не обязательно будет совпадать со структурой которую выберешь и ты, и со структурой которую выбрал автор книги которая тебя смутила. При этом все три структуры будет абсолютно правильными потому что будут преследовать разные цели. SashaMercuryисходя из свойств и задач для графа, требуется список вершин (двусвязный), и какая-то динамическая, удобная по скорости(но не факт что в реализации и в использовании), структура для списка реберНу и? Ты уже ответил на 60% вопроса. Ты уже догадался что вершины и ребра удобно хранить по отдельности. И уже знаешь как будешь хранить вершины. Теперь еще придумай как хранить ребра и вся задача будет решена. Такое решение мне не нравилось(но я остановился на нём). Проблема с графами решена, спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 02:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)SashaMercury, нашёл интересный сайтик Algorithms and Data Structures Спасибо. Но это ведь Java ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 02:53 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercurykealon(Ruslan)SashaMercury, нашёл интересный сайтик Algorithms and Data Structures Спасибо. Но это ведь JavaИ что? Ты думаешь принципы хранения данных в разных языках отличаются? Уже который раз я тебе повторяю: Саша, возьмись за другие языки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 04:31 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercuryпропущено... Спасибо. Но это ведь JavaИ что? Ты думаешь принципы хранения данных в разных языках отличаются? Уже который раз я тебе повторяю: Саша, возьмись за другие языки. нет, я думаю что Java это прежде всего объектно-ориентированный язык программирования, для работы программы на Java требуется виртуальная машина, что влияет на скорость программ написанных на данном языке, и на требования к ресурсам. Потому мне не интересно глубоко изучать этот язык. Может быть я с ним ознакомлюсь, когда будет время. Сейчас занимаюсь C++, это ведь другой язык, и самое главное, другая парадигма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 04:39 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White Owl, и большое спасибо что советуете. Я постоянно что-то изучаю и читаю по программированию, даже когда уезжаю куда-нибудь, и не появляюсь тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 04:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryнет, я думаю что Java это прежде всего объектно-ориентированный язык программирования, для работы программы на Java требуется виртуальная машина, что влияет на скорость программ написанных на данном языке, и на требования к ресурсам. Потому мне не интересно глубоко изучать этот язык. Может быть я с ним ознакомлюсь, когда будет время. Сейчас занимаюсь C++, это ведь другой язык, и самое главное, другая парадигмаНеправильно ты учишься. Неправильно. Ты сейчас ужасающе однобок и поэтому говоришь глупости. Забудь про Си. Забудь про С++. Тебе сейчас надо минимум полгода VBA. Вот есть у тебя задача какая-нибудь по работе? Открой Эксель и реши ее на макросах Экселя. Перестань читать умные книги, они тебе сейчас уже ничего не дадут. Вот когда станешь асом (хотя бы маленьким асом) в манипулировании Экселевскими ячейками, тогда прочитаешь умные книги еще раз. Ты очень удивишься, это я тебе гарантирую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 05:23 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercuryнет, я думаю что Java это прежде всего объектно-ориентированный язык программирования, для работы программы на Java требуется виртуальная машина, что влияет на скорость программ написанных на данном языке, и на требования к ресурсам. Потому мне не интересно глубоко изучать этот язык. Может быть я с ним ознакомлюсь, когда будет время. Сейчас занимаюсь C++, это ведь другой язык, и самое главное, другая парадигмаНеправильно ты учишься. Неправильно. Ты сейчас ужасающе однобок и поэтому говоришь глупости. Забудь про Си. Забудь про С++. Тебе сейчас надо минимум полгода VBA. Вот есть у тебя задача какая-нибудь по работе? Открой Эксель и реши ее на макросах Экселя. Перестань читать умные книги, они тебе сейчас уже ничего не дадут. Вот когда станешь асом (хотя бы маленьким асом) в манипулировании Экселевскими ячейками, тогда прочитаешь умные книги еще раз. Ты очень удивишься, это я тебе гарантирую. По-моему вы не шутите, но совет очень странный, VBA мне знаком и не представляет никакого интереса. Что же конкретно глупого я сказал ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 09:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЧто же конкретно глупого я сказал ? насчёт виртуальной машины ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 09:20 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
wiki . wiki A Java virtual machine (JVM) is an abstract computing machine that enables a computer to run a Java program. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 09:34 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПо-моему вы не шутите, но совет очень странный, VBA мне знаком и не представляет никакого интереса. Что же конкретно глупого я сказал ? Сова говорит совершенно серъезно. Чем опытнее программист - тем более лаконично он подбирает технологию для решения задачи. Когда тебе за 40 - то "трабл-шутить" можешь уже на любом ЯП. Просто тебе станет пофиг. И мир не вращается вокруг плюсов. Мои ценные камрады + синоры-помидоры с Винницы перешли в мой Java проект с Сей и Дельфей. Вот так вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 10:04 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryA Java virtual machine (JVM) is an abstract computing machine that enables a computer to run a Java program. И как наличие прокладки влияет на парадигму ООП?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 12:32 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercurykealon(Ruslan)SashaMercury, нашёл интересный сайтик Algorithms and Data Structures Спасибо. Но это ведь Java там не только ява, там и на C++ много и как уже сказали, неважно какой язык ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 16:41 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Интересно. 1. Пишу что Java мне не интересна. 2. Объясняю почему. 3. И говорю что занимаюсь С++ 4. Мне говорят что я жутко однобок, и лучше бы на VBA стал что-то делать. И в принципе, это я пропустил мимо ушей, ибо это наше Сообщество. 5. И просто спросил, что глупого я сказал ? 6. На что мне ответили - что-то о виртуальной машине. 7. Однако ничего лишнего и глупого я сказать не мог, только изложил факты. SSнет, я думаю что Java это прежде всего объектно-ориентированный язык программирования, для работы программы на Java требуется виртуальная машина, что влияет на скорость программ написанных на данном языке, и на требования к ресурсам Java не ООЯ ? Виртуальной машины нет ? Это не влияет на скорость программ и на требования к ресурсам ? И программа на Java будет аналогична программе на С++ по этим двум критериям ? В частных случаях да, как правило нет. maytonСова говорит совершенно серъезно. Чем опытнее программист - тем более лаконично он подбирает технологию для решения задачи. Когда тебе за 40 - то "трабл-шутить" можешь уже на любом ЯП. Просто тебе станет пофиг. И мир не вращается вокруг плюсов. Мои ценные камрады + синоры-помидоры с Винницы перешли в мой Java проект с Сей и Дельфей. Вот так вот. Он вообще не об этом говорил, он говорил - учите VBA, вы однобокий человек. И мир может быть не вращается вокруг плюсов, и может быть я ни копейки не заработаю, когда буду работать, от того, что буду знать их, но мне нравится Си, и нравится С++(хотя знаю я его слабо), и я его ещё не изучил. Вы говорите кто-то перешёл с чего на что-то. А вот если бы хирург удаляющий аппендицит перешл в нейрохирургию, пришлось ему например, вы бы легли к нему на стол ? Нельзя взять и перейти. Нужно изучить что-то (не 1 месяц), а потом переходить. Или если человек пишет какие-нибудь детективы, Донцова fe, а ей говорят, вы знаете, напишите нам что-нибудь в стиле раннего Достоевского. Вы же писатель. Что она напишет ? Порнографию. Или если режиссера снимавшего какое-нибудь современное русское дерьмо, попросили бы снять в 2003 году Возвращение Звягинцева, что бы он снял ? Когда я слышу что кто-то изучил кучу ЯП, переходит из одного проекта в другой, и тд и тп, значит этот человек, скорее всего (ибо бывают исключения), ничего толком не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 01:59 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА вот если бы хирург удаляющий аппендицит перешл в нейрохирургию, пришлось ему например, вы бы легли к нему на стол ?Увы, но в данном случае метафора другая. Приходит молодой танцор к старому и говорит: - Моя партнерша не хочет танцевать со мной. Вальсировать соглашается, а как танго или балет - так ни в какую, говорит боится что я ее уроню. - Так молодой человек, у вас же мускулов нет. Сходите в спортзал, потягайте штангу чуток, нарастите бицепсы так ваша партнерша и на акробатические танцы согласится. - Штангу? Да вы что?! Я же танцор, артист. А в штанге нет никакого художественного выражения. Вы мне лучше посоветуйте какие еще па выучить чтобы моя постоянная партнерша доверилась чтобы я ее поднимал на сцене. SashaMercuryКогда я слышу что кто-то изучил кучу ЯП, переходит из одного проекта в другой, и тд и тп, значит этот человек, скорее всего (ибо бывают исключения), ничего толком не может.Да, люди выучившие целый ЯП действительно так думают. А люди научившиеся программировать - не обращают внимания на язык и просто программируют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 05:19 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercuryА вот если бы хирург удаляющий аппендицит перешл в нейрохирургию, пришлось ему например, вы бы легли к нему на стол ?Увы, но в данном случае метафора другая. Приходит молодой танцор к старому и говорит: - Моя партнерша не хочет танцевать со мной. Вальсировать соглашается, а как танго или балет - так ни в какую, говорит боится что я ее уроню. - Так молодой человек, у вас же мускулов нет. Сходите в спортзал, потягайте штангу чуток, нарастите бицепсы так ваша партнерша и на акробатические танцы согласится. - Штангу? Да вы что?! Я же танцор, артист. А в штанге нет никакого художественного выражения. Вы мне лучше посоветуйте какие еще па выучить чтобы моя постоянная партнерша доверилась чтобы я ее поднимал на сцене. SashaMercuryКогда я слышу что кто-то изучил кучу ЯП, переходит из одного проекта в другой, и тд и тп, значит этот человек, скорее всего (ибо бывают исключения), ничего толком не может.Да, люди выучившие целый ЯП действительно так думают. А люди научившиеся программировать - не обращают внимания на язык и просто программируют. Все эти посылы/сообщения(и мои и ваши), имеют отношения к софистике. По существу вы так и не прокомментировали свое изначальное обвинение. Нет конкретики, а софистика мне не интересна(когда её так много). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 06:12 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury С++(хотя знаю я его слабо) Гм. Ты против меня профессор. За n-лет работы с C++ так и не смог заставить себя использовать префиксные и постфиксные операторы ++, --, ... ... ... /ну разве что иногда в тривиальных строках типа cntItems++; . Но в параметрах функций например никогда. Ну не мои они./ Вообщем если кратко - использую "классический" C++, а не "сахарный" ООП использую редко, так как больших проектов на C++ ни когда не разрабатывал /и не буду. Он не для этого/, а вот libraries десятки. На мой взгляд понимание как кодировать на C++ - 1% необходимых знаний разработчика. Честно говоря не понимаю смысл всяких там "синтаксических войн" /скорее всего эти люди вовсе и не программисты, а скорее - тролли/. PS: Впрочем "Имеются и другие мнения". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 07:47 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury7. Однако ничего лишнего и глупого я сказать не мог, только изложил факты Вы просто не знаете фактов . Java использует т.н. промежуточное представление: есть фасад (frontend), движок (backend) и собственно байт-код. От ЯВУ зависит только фасад (компилятор) от среды исполнения только движок (JVM). Байт-код нейтрален и тому и другому. Будет ли движок интерпретировать байт-код или генерировать машинный - вопрос десятый. На практике - генерирует. Причём и динамически (JIT) и статически (ad-hoc). P.S. Основные проблемы в том, что технологию не отличают от JLS и, что ещё хуже, от Java API ( SE / EE ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 17:25 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Владимир2012так как больших проектов на C++ ни когда не разрабатывал /и не буду. Он не для этого/,Корявенькое суждение /ниже приведена расшифровка моего "глубокого" суждения из серии "1 имею - 2 в уме"/. Разработка на C++ компиляторов, СУБД, драйверов, libraries, ... ... ... - "самое то", а к примеру бухгалтерских программ, ... на мой взгляд не эффективно. Скорее всего для такого рода задач надо с использованием C++ создавать системы обработки данных: СУБД, 1С, ... ... ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 18:23 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВсе эти посылы/сообщения(и мои и ваши), имеют отношения к софистике. По существу вы так и не прокомментировали свое изначальное обвинение. Нет конкретики, а софистика мне не интересна(когда её так много).Что именно в моих словах ты не понял. Почему я считаю тебя однобоким? Потому что ты уже вполне достаточно развил свое понимание одного конкретного языка, но до сих пор не понял что язык это всего-лишь средство, а не цель. Ты не понимаешь что совершенно не важно насколько быстро компьютер посчитает зарплату, а важно сумеешь ты объяснить компьютеру как эту зарплату посчитать или не сумеешь. Поэтому-то я тебе и советую сменить ЯП. И не важно насколько другой ЯП будет медленнее или быстрее, неважно насколько другой ЯП будет удобнее или неудобнее. Но ты должен поверить, (не понять умом, а принять сердцем) что любую задачу можно решить на любом языке. Только тогда ты начнешь видеть параллели между языками, только тогда ты сможешь брать интересные идеи описанные на одном языке и использовать их в своем любимом. Вот зачем люди учат иностранные языки? Любую книгу можно написать на русском, английском или японском. Отдельные фразы будут выглядеть и звучать по разному, но история и мысли автора будут одни и те-же на каком бы языке их не выражали. Ты с этим согласен? А если ты умеешь читать только на одном языке - ты рискуешь не получить доступ к громадному объему полезных идей, только потому что дяди-полиглоты поленились сделать перевод. Точно так же и тут - вот есть остроумные и быстрые алгоритмы и удобные способы хранить информацию. Человек который их придумал любит Java (ну вот такой он странный человек). Но он придумал прекрасный алгоритм и описал его на своем любимом языке. Ты, любящий C++, мучаешься и пытаешься изобрести аналогичный алгоритм, а всего-то нужно взять готовый алгоритм на Java и перевести его на С++. Но ты этого сделать не можешь, только потому что считаешь язык Java не достаточно хорошим. Я понятно ответил почему считаю тебя ужасающе однобоким? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 18:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, советую (настоятельно) изучить ассемблер, пока тебе не до зарабатывания денег и есть свободное время. Асм в реальной жизни врядли пригодится (тем более что зоопарк процессоров разрастается), но будет понимание как оно в реале работает. Затем С++ (не С) тоже надо изучить чтобы понять что такое ООП, какие у ниго максимальные возможности, но опять же тоже для общего развития. Зато когда будешь писать ради зарабатывания денег на джаве, С# и т.д. и т.п. - будешь понимать нижние и верхние границы возможностей, а не ограничения выбранного языка. Дополнительно какую-нибудь ОС взять и досконально API изучить, для понимания что может дать ОС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 18:58 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlТы не понимаешь что совершенно не важно насколько быстро компьютер посчитает зарплату, а важно сумеешь ты объяснить компьютеру как эту зарплату посчитать или не сумеешь. Согласен если зарплату считать надо, но если что-то посерьезней? Знакомый продавец железа поставляет железо одному химику. Тот изобретает формулы и обсчитывает их не знаю в чем, но один расчет идет несколько месяцев. ХЗ в чем он их считает, есть подозрение если бы тот химик знал Си и/или асм, то может расчеты были бы в разы быстрее, а так он постоянный клиент на обновление железа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 19:06 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Вижу, сегодня Сашку досталось на "орехи" . Каждый поругал понемногу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 19:10 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
White OwlТочно так же и тут - вот есть остроумные и быстрые алгоритмы и удобные способы хранить информацию. Для SashaMercury. И не важно на каком языке - важно суть, а язык - средство выражения. Очень много классных идей ... в JavaScript проектах. Да даже тот же NodeJS чего стоит. Разработчики поняли и создали, то что давным давно нужно было реализовать ... ... ... Так что на 100% согласен с White Owl. Если хочешь стать кодером, то штудируй стандарты С++ и разбирай их до косточек ... ... ... Если хочешь стать разработчиком, то должен понять, что C++ - 1% от того что ты должен знать для того, чтобы хотя бы бы похожим на разработчика. А разработчиком станешь тогда, когда разработка новых технологий будет не "в тягость", а в радость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 19:45 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovSashaMercury7. Однако ничего лишнего и глупого я сказать не мог, только изложил факты Вы просто не знаете фактов . Java использует т.н. промежуточное представление: есть фасад (frontend), движок (backend) и собственно байт-код. От ЯВУ зависит только фасад (компилятор) от среды исполнения только движок (JVM). Байт-код нейтрален и тому и другому. Будет ли движок интерпретировать байт-код или генерировать машинный - вопрос десятый. На практике - генерирует. Причём и динамически (JIT) и статически (ad-hoc). P.S. Основные проблемы в том, что технологию не отличают от JLS и, что ещё хуже, от Java API ( SE / EE ). Я сказал 1. Java объектно-ориентированный язык. 2. Для запуска программы на Java требуется виртуальная машина. 3. Это влияет на требование к ресурсам. И ничего более не сказал, ничего лишнего не сказал. То о чём вы говорите, детали, которые не опровергают 3 пункта написанных выше и не влияют на общую картину. Критика должна быть конструктивной, замечания чёткими, понятными и по существу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 02:01 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Каким образом вышеприведенное может помешать описывать алгоритмы и структуры данных на java ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 09:06 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
ИзопропилSashaMercury, Каким образом вышеприведенное может помешать описывать алгоритмы и структуры данных на java ? Никаким. А я разве сказал что это может помешать ? А каким образом 2 гири весом в 1 кг в вашем рюкзаке могут помешать вам ходить ? Дискуссия по поводу Java в данном топике мне не интересна, ещё вчера. Комментировать что-то более по данному вопросу не стоит, это лишь бессмысленно потраченное время. Прошу Сообщество прекратить дискуссию по яп Java в данном топике. Администрация Сообщества, прошу не закрывать данную тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 10:43 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Я может не понимаю смысла спора, но выскажусь. :) Модератор: Начиная с этого места, весь топик ушел черти-куда. Чистим нафиг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 10:50 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury2. Для запуска программы на Java требуется виртуальная машина. Существуют лаунчеры позволяющие запускать java-приложение просто как exe-шник. С точки зрения Windows-пользователя он абсолютно ничем не отличается от обычного бинарника. На такой технологии построены к примеру среда разработки IntellijIdea и Torrent-клииент Azureus/Vuze. И вообще любая мало-мальски сложная задача через некоторое время порождает в техническом задании целый слой рантайма с RTTI и мета-описателями который можно с успехом категоризировать как виртуальную машину. Свои вирт. машины есть в AutoCad, Basic, Веб-браузерах, продуктах MS, в средах разработки Perl, PHP, Python, и RPG-играх (Lua/Python). Поэтому я-бы не стал акцентировать на ВМ так сильно. Скорее другой вопрос интересен. Возможно ли современное прогрессивное программирование только на классической модели "исходник-бинарь"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 10:50 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Мне непонятен акцент на "описывать алгоритмы". В чем проблема описания? Половина алгоритмов дискретной математики описана на Modula/ADA/Pascal. На языках по сути мёртвых в наше время. В знаменитом многотомнике Кнута алгоритмы описывались в виде формул либо в виде ПО Ассемблера к гипотетической виртуальной машине. Во всех совестских книжках (до 1980 прибл) численные методы описаны мат.формулой или блок схемой или АЯ или его бох весть каким способом. Поэтому для меня проблемы "описания" алгоритмов не существует. Их можно описывать на чём угодно и как угодно. Главное чтобы договорённости об аппарате описания были одинаково понятны для писателя и читателя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 12:37 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mayton, petrav проблема у автора топика в том что он ассоциирует язык и алгоритм, хотя эти понятия слабо пересекаются максимум, некоторые структуры могут быть реализованы в самом языке (множества, словари и пр.), но они как правило очень известны и довольно немногочисленны кстати, перевод алгоритма на другой язык очень помогает в его понимании ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 13:50 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЯ сказал 1. Java объектно-ориентированный язык. 2. Для запуска программы на Java требуется виртуальная машина. 3. Это влияет на требование к ресурсам. И ничего более не сказал, ничего лишнего не сказал. То о чём вы говорите, детали, которые не опровергают 3 пункта написанных выше и не влияют на общую картину.1. Java не язык, Java - платформа. Это факт, которого вы не понимаете; 2. Требуется. Языков и систем, использующих виртуальные машины - много. Не факт - банальность.; 3. Системные требования встраиваемых JVM - 32Мб. Тот же ruToken Pro и аналоги обходятся, как я понимаю и меньшим. С другой стороны, у AzulSystems есть реальный пример системы, где JVM исполняет приложение с, примерно, терабайтной кучей. Года три-четыре назад это было "всего" четверть терабайта. Так что с ресурсами - ни о чём вообще.Критика должна быть конструктивной, замечания чёткими, понятными и по существу.Чтобы понимать ответ нужен некий базовый фундамент. А вы, уж простите, балансируете на верхушке незабитой сваи и радуетесь, что так высоко залезли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 19:10 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovС другой стороны, у AzulSystems есть реальный пример системы, где JVM исполняет приложение с, примерно, терабайтной кучей. Года три-четыре назад это было "всего" четверть терабайта. Несколькими топиками выше мне кажется я начинаю понимать что наш пассажир кивает то на MemModel/GC, то на VM ссылаясь на аспект т.н. "реального времени". Забавно но я специально сидел и пытался вспомнить хотя-бы одно ТЗ из своих С++ - ных где-бы факт реалтаймовости был отражён хотя-бы тезисно. Но... ничего не могу вспомнить. Не было таких. При том что у меня достаточно много друзей - эмбедщиков кодорые кодят свои микро-контроллеры на С но и в их предметной области есть нюансы. И ни один из них не делился со мной проблемами перформанса или латентности. У них другие бока были. Вообще не в этой плоскости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 19:27 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Модератор: Для желающих продолжать идите сюда: http://www.sql.ru/forum/1172924/o-primenimost-yazykov Все новые посты не относящиеся к теме топика будут убиваться сразу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2015, 17:34 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите пожалуйста, существует ли структура данных(организована линейно) со следующими характеристиками: 1. Поиск индекса минимального/максимального элемента 2. Удаление элемента Почему я говорю о линейной организации, по той причине что мне необходимо знать сколько элементов 'слева' и 'справа' от минимального/максимального. Может быть подойдёт обыкновенный непрерывный массив, но проблема с удалением элемента, слишком долго и слишком часто будет выполняться эта операция. PS Предполагаю, что существуют типы данных из STL удовлетворяющие моим требованиям, но не уверен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 09:04 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Связный список (std::list) не подойдет? Поиск O(N) - обычный перебор. Удаление O(1) - правка ссылок в соседних элементах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 09:36 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Да, у меня опечатка, поиск . Писал про поиск, а думал про сортировку. Дмитрий, не подойдёт. Как я узнаю сколько элементов справа и сколько слева. Множество элементов будет многократно обновляться(после удаления элементов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 09:53 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДа, у меня опечатка, поиск . Писал про поиск, а думал про сортировку. Дмитрий, не подойдёт. Как я узнаю сколько элементов справа и сколько слева. Множество элементов будет многократно обновляться(после удаления элементов) У тебя нет требований к функции расчета смещения, поэтому можно просто сканировать весь список. Если оптимизировать, то надо хранить смещения Min и Max элементов и размер списка. А по мере добавления элементов в список левее или правее Min и левее или правее Max, обновлять эту вспомогательную структуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 10:02 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mcureenab, никакие элементы в список не добавляются. Один раз добавятся и всё. Дальше будут только удаляться. В цикле. На каждой итерации цикла мне нужно искать минимальный элемент и мне необходимо узнать сколько элементов от него слева. Удаляю этот элемент и проделываю аналогичные действия. Итерации продолжаются пока есть элементы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 10:22 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mcureenab У тебя нет требований к функции расчета смещения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 10:24 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДа, у меня опечатка, поиск . Писал про поиск, а думал про сортировку. Дмитрий, не подойдёт. Как я узнаю сколько элементов справа и сколько слева. Множество элементов будет многократно обновляться(после удаления элементов) Просто посчитаешь перебором. Или зная порядковый номер элемента (если нашел перебором, то он известен) и размер списка - легко считается сколько справа/слева. Ты бы лучше задачу поподробней описал. Телепатов тут нет, откуда нам знать что еще тебе надо кроме того что ты написал. Большинство сложных задач не имеет универсального решения. Исходить надо из конкретной задачи, смотреть какие операции чаще надо выполнять, их оптимизировать в первую очередь. Скорее всего потребуется не одна структура, а несколько: в основной данные, в дополнительных метаданные для ускорения работы с данными. Возможно есть смысл алгоритм перестроить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 10:31 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercurymcureenab, никакие элементы в список не добавляются. Один раз добавятся и всё. Дальше будут только удаляться. В цикле. На каждой итерации цикла мне нужно искать минимальный элемент и мне необходимо узнать сколько элементов от него слева. Удаляю этот элемент и проделываю аналогичные действия. Итерации продолжаются пока есть элементы Тут лучше вместо удаления заменять на несуществующее значение. И использовать обычные массивы. Делаешь обычный массив значений. Делаешь второй массив из указателей на значения. Сортируешь второй по *значение. Т.е. получаешь в каком порядке выбирать из первого. Идешь по второму, на каждом шаге в первом выбранное заменяешь на недействительное и считаешь вправо или влево (куда ближе) сколько осталось действительных. Дальше можно оптимизировать подсчет действительных третьим массивом. Делаешь массив счетчиков, например каждый счетчик на группу 256 элементов. Удаляя - уменьшаешь счетчик группы на 1. Для подсчета остается посчитать сколько внутри группы слева, а затем прибавить счетчики всех полных групп слева. Размер элементов в группе подбирать опытным путем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 10:58 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercuryДа, у меня опечатка, поиск . Писал про поиск, а думал про сортировку. Дмитрий, не подойдёт. Как я узнаю сколько элементов справа и сколько слева. Множество элементов будет многократно обновляться(после удаления элементов) Просто посчитаешь перебором. Или зная порядковый номер элемента (если нашел перебором, то он известен) и размер списка - легко считается сколько справа/слева. Да. Из вспомогательных данных, тут только размер списка нужен, чтобы узнать сколько элементов осталось справа. Если на min элемент выходить по индексу, то после его удаления придется как-то актуализировать позиции "сдвинувшихся" элементов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 11:18 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercurymcureenab, никакие элементы в список не добавляются. Один раз добавятся и всё. Дальше будут только удаляться. В цикле. На каждой итерации цикла мне нужно искать минимальный элемент и мне необходимо узнать сколько элементов от него слева. Удаляю этот элемент и проделываю аналогичные действия. Итерации продолжаются пока есть элементы Требование O(1) на удаление - слишком суровое. Дело в том что даже со списком надо будет актуализировать счетчики "количества слева". Подумай о компромиссах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 12:02 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Если упростить задачу, то у нас есть неупорядоченный массив с уникальными элементами. Для каждого элемента мне нужно определить сколько элементов до него(слева от него) больше него. Асимптотика n^2 и выше меня не устраивает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 12:05 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
МаркДело в том что даже со списком надо будет актуализировать счетчики "количества слева" Вот вот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 12:07 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЕсли упростить задачу, то у нас есть неупорядоченный массив с уникальными элементами. Для каждого элемента мне нужно определить сколько элементов до него(слева от него) больше него. Асимптотика n^2 и выше меня не устраивает Мой вариант читал? 18266267 Dima T ... Делаешь массив счетчиков, например каждый счетчик на группу 256 элементов. Удаляя - уменьшаешь счетчик группы на 1. Для подсчета остается посчитать сколько внутри группы слева, а затем прибавить счетчики всех полных групп слева. Размер элементов в группе подбирать опытным путем. Не O(1) но меньше чем n^2 В принципе можно построить бинарное дерево, где каждый узел содержит количество подузлов. Тогда при удалении надо будет уменьшить log2(N) счетчиков. И для подсчета перебрать log2(N). Т.е. общая сложность будет N*log2(N) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 12:24 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Ребята. Тема структур данных - интересная и бесконечная. Можно смотреть в сторону отложенных калькуляций или версионностей и получить на этом еще больше перформанса. Но лучше идти от ТЗ. Особенно в части статистики. К примеру будет 1 миллиард элементов в списке. Будет удалено примерно 100 млн. И будет 200 млн поисков. Можно даже рассмотреть промахи поиска и удалений и сыграть на этом. Промоделлить это и выбрать лучшую структуру. Мне кажется такой подход - продуктивнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 12:51 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Как я понял ТЗ такое: SashaMercuryникакие элементы в список не добавляются. Один раз добавятся и всё. Дальше будут только удаляться. В цикле. На каждой итерации цикла мне нужно искать минимальный элемент и мне необходимо узнать сколько элементов от него слева. Удаляю этот элемент и проделываю аналогичные действия. Итерации продолжаются пока есть элементы Или почти тоже самое другими словами SashaMercuryЕсли упростить задачу, то у нас есть неупорядоченный массив с уникальными элементами. Для каждого элемента мне нужно определить сколько элементов до него(слева от него) больше него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 12:59 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercurymcureenab, никакие элементы в список не добавляются. Один раз добавятся и всё. Дальше будут только удаляться. В цикле. На каждой итерации цикла мне нужно искать минимальный элемент и мне необходимо узнать сколько элементов от него слева. Удаляю этот элемент и проделываю аналогичные действия. Итерации продолжаются пока есть элементы Тут лучше вместо удаления заменять на несуществующее значение. И использовать обычные массивы. Делаешь обычный массив значений. Делаешь второй массив из указателей на значения. Сортируешь второй по *значение. Т.е. получаешь в каком порядке выбирать из первого. Идешь по второму, на каждом шаге в первом выбранное заменяешь на недействительное и считаешь вправо или влево (куда ближе) сколько осталось действительных. Дальше можно оптимизировать подсчет действительных третьим массивом. Делаешь массив счетчиков, например каждый счетчик на группу 256 элементов. Удаляя - уменьшаешь счетчик группы на 1. Для подсчета остается посчитать сколько внутри группы слева, а затем прибавить счетчики всех полных групп слева. Размер элементов в группе подбирать опытным путем. К сожалению будем иметь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 13:40 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Не получится заменять каждый элемент недействительным, к сожалению. Конечно я об этом подумал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 13:41 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЕсли упростить задачу, то у нас есть неупорядоченный массив с уникальными элементами. Для каждого элемента мне нужно определить сколько элементов до него(слева от него) больше него. Асимптотика n^2 и выше меня не устраиваетЭто как то уж очень упрощенно и очевидно. Получается нужно один раз пройти список подсчитывая количество просмотренных элементов и каждому элементу списка присвоить текущее значение счетчика. Но каждое удаление элемента приведет к сдвигу хвоста списка. В массиве, это сдвиг элементов, в односвязном списке это перенумерация элементов. Думаю, в этом смысле альтернатив нет. Так или иначе, после удаления придется пробегать весь хвост и выполнять декремент номеров, но искать элементы можно будет по индексу. Или перед удалением пробегать всю голову, но сравнивая ключ. Трудно сказать что быстрее. От данных зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 14:19 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryК сожалению будем иметь Это если сделать только то что ты красным выделил. Если сделать с группами - будет быстрее. Например К размер группы, тогда для подсчета надо перебрать: К/2 (внутри группы) + N/2K (количество целых групп). Остается подобрать такое К чтобы К/2+N/2K было минимальным. Если добавить что К=2^M (чтобы считать быстрее) то подбор несложный. Если с деревом 18266267 то Тут по сути группирование групп в несколько уровней. SashaMercuryНе получится заменять каждый элемент недействительным, к сожалению. Конечно я об этом подумал Почему? Есть еще какие-то условия или просто значений не хватает? Если не хватает - то минимально допустимое. Оно используется только на первом шаге, затем оно не встречается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 14:20 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЕсли упростить задачу, то у нас есть неупорядоченный массив с уникальными элементами. Для каждого элемента мне нужно определить сколько элементов до него(слева от него) больше него. Асимптотика n^2 и выше меня не устраивает Это построение индекса. Насколько я себе представляю, в сбалансированном индексе можно легко рассчитать количество элементов на "ветвях" справа и слева. По крайней мере добавляя в индекс последний ключ нужно будет обновить не более log(n) блоков индекса, чтобы скорректировать вес обновленной ветви от листа до корня. И еще два блока, если потребуется балансировка. Берем очередной элемент, добавляем его в индекс и одновременно суммируем на каждом ярусе дерева, сколько элементов оказалось (меньше/больше). Причем все они находятся до текущего элемента, ведь тех что после в индексе еще нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 15:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Саша давай макет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 15:20 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Структура блока такая: Код: plaintext 1. 2. 3. 4. 5. 6. 7. // Для затравки добавляем первый ключ. sm = 0; struct block *root = { a[0].key, null, bull, 0, 0, 0 }; a[0].i_gt = sm; ну и т.д. .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 15:41 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mcureenabSashaMercuryЕсли упростить задачу, то у нас есть неупорядоченный массив с уникальными элементами. Для каждого элемента мне нужно определить сколько элементов до него(слева от него) больше него. Асимптотика n^2 и выше меня не устраиваетЭто как то уж очень упрощенно и очевидно. Получается нужно один раз пройти список подсчитывая количество просмотренных элементов и каждому элементу списка присвоить текущее значение счетчика. Но каждое удаление элемента приведет к сдвигу хвоста списка. В массиве, это сдвиг элементов, в односвязном списке это перенумерация элементов. Думаю, в этом смысле альтернатив нет. Так или иначе, после удаления придется пробегать весь хвост и выполнять декремент номеров, но искать элементы можно будет по индексу. Или перед удалением пробегать всю голову, но сравнивая ключ. Трудно сказать что быстрее. От данных зависит. Асимптотика должна быть одинаковой, так что ничего не быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 02:06 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Асимптотика добавления в дерево зависит от его высоты, а высота его зависит от того в каком порядке в него попадают данные, и может варьироваться от до . Нельзя гарантировать что порядок данных будет хорошим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 02:14 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryАсимптотика добавления в дерево зависит от его высоты, а высота его зависит от того в каком порядке в него попадают данные, и может варьироваться от до . Нельзя гарантировать что порядок данных будет хорошим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 02:18 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, эх, вот придумал бы ты балансировку для 2-D дерева за log(n), сразу стал бы знаменитым позвали бы тебя для баз всяких алгоритмы придумывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 06:45 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercurySashaMercuryАсимптотика добавления в дерево зависит от его высоты, а высота его зависит от того в каком порядке в него попадают данные, и может варьироваться от до . Нельзя гарантировать что порядок данных будет хорошим Высота сбалансированного дерева (АВЛ-дерево) равна log(n) для любых исходных данных. От распределения данных зависит только число вращений вершин во время добавления или удаления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 09:09 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mcureenabSashaMercuryпропущено... Высота сбалансированного дерева (АВЛ-дерево) равна log(n) для любых исходных данных. От распределения данных зависит только число вращений вершин во время добавления или удаления. Это близко, но на самом деле не так. Если использовать сбалансированные деревья (AVL или RB), то задачу пожалуй можно решить. Я ещё думаю, стоит ли оно того, может быть есть другие способы её решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 09:18 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercurymcureenabпропущено... Высота сбалансированного дерева (АВЛ-дерево) равна log(n) для любых исходных данных. От распределения данных зависит только число вращений вершин во время добавления или удаления. Это близко, но на самом деле не так. Разница длинны двух любых маршрутов от корня к листьям в АВЛ дереве 0 или 1. Это существенно только для совсем маленького объема данных, когда в дереве мало ярусов. Но наверное никакая структура или алгоритм не даст в общем случае все маршруты равной длинны. Форма дерева в общем случае будет зависеть от порядка исходных данных, но когда ярусов много, это несущественно. У тебя еще какие то соображения есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 10:43 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mcureenabSashaMercuryпропущено... Это близко, но на самом деле не так. Разница длинны двух любых маршрутов от корня к листьям в АВЛ дереве 0 или 1. Это существенно только для совсем маленького объема данных, когда в дереве мало ярусов. Но наверное никакая структура или алгоритм не даст в общем случае все маршруты равной длинны. Форма дерева в общем случае будет зависеть от порядка исходных данных, но когда ярусов много, это несущественно. У тебя еще какие то соображения есть? Ваше первое утверждение не совсем верно, вот и всё. Одно дело если вы используете O нотацию и говорите об оценках, но если вы говорите конкретные функции, то вы ошибаетесь. Используя O-нотацию мы имеем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 12:52 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Сделал макет Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 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. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. Там решение только перебором. Но есть генератор исходных данных, замер времени, вывод данных и результата с контрольной суммой. Кому интересно: писать свою функцию вместо perebor(). Перебор не быстро работает. 1,5 сек для массива в 50 тыс. элементов. 6 сек для 100 тыс. Чистый N^2 Попробую свою идею 18266267 затестить на скорость. Надо только определиться можно исходные данные портить или нет. Предлагаю портить, т.к. несложно биткарту добавить для пометок, сложность от этого не изменится, но лишний код добавится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 17:14 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Почему используется именно 12347? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 01:53 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПочему используется именно 12347? 12345 как-то не очень перемешивало, взял ближайшее простое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 05:41 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Известно что некоторые структуры данных можно реализовать разными способами. Например, очередь можно реализовать с использованием двусвязного списка, либо с использованием непрерывной области памяти, и др. Но как нам известно у любой очереди существуют интерфейсы(если это слово корректно употребить в данном случае) dequeue и enqueue. Правильно ли я понимаю, что для того чтобы реализовать различный вариации определения очередей(здесь слово 'определение' понимается в контексте class definition) грамотным будет первым делом создать некий базовый тип(класс), и наследовать вариации различных определений от него ? Но тогда возникает такой вопрос, данный класс должен быть абстрактным классов, либо достаточно определить все методы этого класса с меткой protecded ? Подскажите пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 05:00 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. Известно что некоторые структуры данных можно реализовать разными способами. Например, очередь можно реализовать с использованием двусвязного списка, либо с использованием непрерывной области памяти, и др. Но как нам известно у любой очереди существуют интерфейсы(если это слово корректно употребить в данном случае) dequeue и enqueue. Правильно ли я понимаю, что для того чтобы реализовать различный вариации определения очередей(здесь слово 'определение' понимается в контексте class definition) грамотным будет первым делом создать некий базовый тип(класс), и наследовать вариации различных определений от него ? Но тогда возникает такой вопрос, данный класс должен быть абстрактным классов, либо достаточно определить все методы этого класса с меткой protecded ? Подскажите пожалуйста если в плане ООП, то да, наследование от базового класса но в плане эффективности это не гуд, поэтому и используют шаблоны\макросы где все вызовы в итоге можно сделать статическими и компилятор может агрессивно задействовать оптимизацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 07:01 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)SashaMercuryЗдравствуйте. Известно что некоторые структуры данных можно реализовать разными способами. Например, очередь можно реализовать с использованием двусвязного списка, либо с использованием непрерывной области памяти, и др. Но как нам известно у любой очереди существуют интерфейсы(если это слово корректно употребить в данном случае) dequeue и enqueue. Правильно ли я понимаю, что для того чтобы реализовать различный вариации определения очередей(здесь слово 'определение' понимается в контексте class definition) грамотным будет первым делом создать некий базовый тип(класс), и наследовать вариации различных определений от него ? Но тогда возникает такой вопрос, данный класс должен быть абстрактным классов, либо достаточно определить все методы этого класса с меткой protecded ? Подскажите пожалуйста если в плане ООП, то да, наследование от базового класса но в плане эффективности это не гуд, поэтому и используют шаблоны\макросы где все вызовы в итоге можно сделать статическими и компилятор может агрессивно задействовать оптимизацию Что такое ООП мы все понимаем по разному. Мне нужно чтобы это было грамотно и правильно. Использование типов должно быть. Но правильное проектирование типов(классов) вопрос сложный. Мне не очень понятно почему при таком проектировании, должны возникнуть проблемы на которые вы указали, поясните пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 07:37 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Вот только получается что абстрактный класс о котором я говорил выше должен быть оформлен в виде шаблона класса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 08:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЧто такое ООП мы все понимаем по разному. Мне нужно чтобы это было грамотно и правильно. Использование типов должно быть. Но правильное проектирование типов(классов) вопрос сложный. Мне не очень понятно почему при таком проектировании, должны возникнуть проблемы на которые вы указали, поясните пожалуйста В ООП как и в других ученьях есть различные философии и практики. Если следовать SOLID то я бы акцентировал внимание на 4-й принцип (буква I) рекомендует Interface segregation principle (Много специализированных интерфейсов лучше, чем один универсальный.) . Если в queue на базе памяти и двузсвязного списка можно выделить два и более интерфейса - то я бы это сделал. Не знаю про какую такую эффективность толкует Руслан - но скорее всего речь идёт об оптимизации вирутального вызова. Если говорить о макросах - то это не есть ООП. Это нечто более примитивное и механическое. В С++ шаблоны+макросы возведены в особый ранг технических приёмов которые и делают С++ быстрым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 09:15 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВот только получается что абстрактный класс о котором я говорил выше должен быть оформлен в виде шаблона класса ну вот видишь, смысл тогда от всей этой дребедени с наследованием, полиморфизмом, сделал шаблон и не паришься названия одинаковые методам дай да и всё, хочешь массив, используй шаблон с массивом, хочешь классическую - тоже проблем нет всё у тебя разложится в конкретный код, нужный тебе именно для этого типа и с нужным тебе алгоритмом и структурой хранения в STL работает, ёжики колются, но .. - эффективнее по использованию и скорости придумать малореально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 10:30 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)SashaMercuryВот только получается что абстрактный класс о котором я говорил выше должен быть оформлен в виде шаблона класса ну вот видишь, смысл тогда от всей этой дребедени с наследованием, полиморфизмом, сделал шаблон и не паришься названия одинаковые методам дай да и всё, хочешь массив, используй шаблон с массивом, хочешь классическую - тоже проблем нет всё у тебя разложится в конкретный код, нужный тебе именно для этого типа и с нужным тебе алгоритмом и структурой хранения в STL работает, ёжики колются, но .. - эффективнее по использованию и скорости придумать малореально Шаблоны будут для нескольких реализаций независимо от того будет ли абстрактный класс или нет. В любом случае спасибо всем, решил отказаться от этой идеи в силу того что не так глубоко изучил абстрактные классы, и советов выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2015, 01:46 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Только вот что странно, раньше, когда у меня был просто класс, и было три файла: q.h, q.cpp, и в main.cpp я подключал q.h программа собиралась корректно. Теперь я сделал класс шаблонным, определение методов в q.cpp выглядит следующим образом Код: plaintext 1. 2. 3. 4. 5. происходит ошибка при сборке. Становятся невидимыми определения этих методов(из q.cpp). Это связано с тем что класс стал шаблонным, и собирать его нужно иначе ? PS когда подключаю в main q.cpp всё ок, но мне это не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2015, 07:10 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryТолько вот что странно, раньше, когда у меня был просто класс, и было три файла: q.h, q.cpp, и в main.cpp я подключал q.h программа собиралась корректно. Теперь я сделал класс шаблонным, определение методов в q.cpp выглядит следующим образом Код: plaintext 1. 2. 3. 4. 5. происходит ошибка при сборке. Становятся невидимыми определения этих методов(из q.cpp). Это связано с тем что класс стал шаблонным, и собирать его нужно иначе ? PS когда подключаю в main q.cpp всё ок, но мне это не нравится. весь код шаблоный должен быть в заголовке . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2015, 07:30 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Почему так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2015, 07:37 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПочему так ?компилятор должен ведь знать, чего именно ему генерить, не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2015, 10:06 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercuryПочему так ?компилятор должен ведь знать, чего именно ему генерить, не? Егорыч это ответ в стиле кэпа. Думаю что имеет смысл нам всем вспомнить почему в С++ исходный код разделён на два подтипа текстов кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2015, 11:15 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonДумаю что имеет смысл нам всем вспомнить почему в С++ исходный код разделён на два подтипа текстов кода.мне кажется, надо вспомнить правила инстанцирования шаблона, и, собственно, вопрос пропадёт сам собой. Была, правда, попытка ввести ключевое слово export, или прагма( export ), не помню, но не взлетело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2015, 12:08 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychmaytonДумаю что имеет смысл нам всем вспомнить почему в С++ исходный код разделён на два подтипа текстов кода.мне кажется, надо вспомнить правила инстанцирования шаблона, и, собственно, вопрос пропадёт сам собой. Была, правда, попытка ввести ключевое слово export, или прагма( export ), не помню, но не взлетело. Почему это происходит так как происходит, примерно понятно. Когда происходит сборка программы линковщик не может найти конкретную реализацию методов для конкретного типа объекта созданного класса. Явное инстанцирование не самый хороший вариант (хотя его можно использовать, я так думаю (кстати, интересно как в STL сделано)). Непонятно почему до сих пор эта проблема не решена, шаблоны, как мне пока кажется, слишком хороший инструмент(особенно для С++, с учётом типизации данного языка), чтобы иметь какие-то особенности по реализации. Работа с ними должна быть проще, без каких-либо особенностей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 02:28 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Например, линковщик видит что необходимо провести инстанцирование шаблона с параметрами int и elseType например, почему бы не провести повторную компиляцию некоторых модулей в которой провести явное инстанцирование данных шаблонных классов ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 02:44 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНепонятно почему до сих пор эта проблема не решена Потому что никакой проблемы нет. SashaMercuryНапример, линковщик видит что необходимо провести инстанцирование шаблона с параметрами int и elseType Линковщик не знает ни про шаблоны, ни про классы. Он видит только переменные и функции. Инстанцированием занимается компилятор. Если он этого не сделал, то линковщик не найдет соответствующую функцию. На практике никакой проблемы нет, т.к. шаблоны размещаются в заголовках и включаются в каждую единицу трансляции, где они используются. А на линковщик возлагается устранение дубликатов инстанцированных шаблонов. И это работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 04:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНапример, линковщик видит что необходимо провести инстанцирование шаблона с параметрами int и elseType например, почему бы не провести повторную компиляцию некоторых модулей в которой провести явное инстанцирование данных шаблонных классов ? Повторную компиляцию? А где он исходники cpp возьмет, если, положим, библиотека поставляется с закрытым кодом? Если так нужно скрыть исходный код или избавиться от многочисленной повторной компиляции сложных шаблонов (которая отнимает массу времени в больших проектах) можно явно указать какие реализации шаблона должны быть инстанцированы в библиотеке - см. явное инстанцирование. Конечно, если в программе понадобится новый экземпляр шаблона, придется менять библиотеку. Другой подход - использовать шаблон как обертку над обычными не шаблонными функциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 08:54 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Анатолий, я лишь говорил о том, что как правило определение класса, и реализация методов класса расположены в разных файлах .h и .cpp Для шаблонных классов несколько иначе. И мне это не очень нравится, это только моё мнение. Я подумаю о том что вы написали, спасибо. У меня только один вопрос: можно ли решить эту 'проблему' на уровне препроцессора/компилятора/линкера ? Чтобы разработчик об этом не задумывался. Например, на этапе препроцессорной обработки определять какие потребуются инстанцирования и добавлять соответствующий код(для вызова явного инстанцирования) в соответствующие заголовочные файлы. Принципиально такое возможно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 09:17 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryАнатолий, я лишь говорил о том, что как правило определение класса, и реализация методов класса расположены в разных файлах .h и .cpp Для шаблонных классов несколько иначе. И мне это не очень нравится, это только моё мнение. Я подумаю о том что вы написали, спасибо. У меня только один вопрос: можно ли решить эту 'проблему' на уровне препроцессора/компилятора/линкера ? Чтобы разработчик об этом не задумывался. Например, на этапе препроцессорной обработки определять какие потребуются инстанцирования и добавлять соответствующий код(для вызова явного инстанцирования) в соответствующие заголовочные файлы. Принципиально такое возможно ? только если поменяют формат объектных файлов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 09:46 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНапример, на этапе препроцессорной обработки определять какие потребуются инстанцирования и добавлять соответствующий код(для вызова явного инстанцирования) в соответствующие заголовочные файлы.а откуда компилятор возьмёт этот код, как думаешь? Компилятор как догадается, что ему надо заглянуть в cpp-файл, и в какой именно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 09:48 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercuryНапример, на этапе препроцессорной обработки определять какие потребуются инстанцирования и добавлять соответствующий код(для вызова явного инстанцирования) в соответствующие заголовочные файлы.а откуда компилятор возьмёт этот код, как думаешь? Компилятор как догадается, что ему надо заглянуть в cpp-файл, и в какой именно? По имени файла. Ладно, пусть вы все правы, я не претендую. Нельзя, значит нельзя. Раз все в Сообществе считают что эта ситуация не даёт каких-то проблем, и вообще, не нужно на ней заострять внимание, то соглашусь. Я вам верю. Спасибо всем за ваше мнение по данному вопросу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 09:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryАнатолий, я лишь говорил о том, что как правило определение класса, и реализация методов класса расположены в разных файлах .h и .cpp Для шаблонных классов несколько иначе. И мне это не очень нравится, это только моё мнение. Я подумаю о том что вы написали, спасибо. У меня только один вопрос: можно ли решить эту 'проблему' на уровне препроцессора/компилятора/линкера ? Чтобы разработчик об этом не задумывался. Например, на этапе препроцессорной обработки определять какие потребуются инстанцирования и добавлять соответствующий код(для вызова явного инстанцирования) в соответствующие заголовочные файлы. Принципиально такое возможно ? Это скорее вопрос к IDE, чем к компилятору. Вероятно, в природе есть утилиты которые помогают автоматически создавать код для явного инстанцирования шаблонов. При желании ты можешь сам сделать такую и добавить в процедуру сборки проекта. В общем случае, когда библиотека шаблонов разрабатывается и компилируется отдельно, разработчик библиотеки должен сам собрать эти данные из других проектов или из требований заказчиков и в как-то передать их в компилятор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 10:30 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЧтобы разработчик об этом не задумывался. А не надо задумываться. Шаблоны - всегда помещать в заголовок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 13:48 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Саш. Яж говорил что ты скоро возненавидишь С++ лютой ненавистью. Ты - математик. И твоя стезя - другое. Just IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 15:25 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonСаш. Яж говорил что ты скоро возненавидишь С++ лютой ненавистью. Ты - математик. И твоя стезя - другое. Just IMHO. Математиками можно смело назвать Вейерштрасса, Коши, Гаусса, Колмогорова, Маркова, Красносельского, Зарубина и других, я только изучаю математику и искренне люблю её. Марк, мне интересны эти языки, навряд-ли я когда-то буду зарабатывать этим на жизнь, но мне это нравится. Из того что порой мне что-то кажется непонятным и я с чем-то не согласен, не следует что мне начинает не нравиться этот язык, из этого, как правило, следует что я мало знаю для того, чтобы понять почему именно так правильно и должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 17:14 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Ну дай бох. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2015, 17:35 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonСаш. Яж говорил что ты скоро возненавидишь С++ лютой ненавистью. Рано еще про ненависть говорить, это он еще за джаву не взялся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2015, 00:45 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. У меня возник вопрос в контексте С++. Существует ли такой контейнер или другая стандартная реализация следующей структуры(контейнера): 1. Содержатся только уникальные элементы типа float, проверка до третьего знака. Соответственно вставка не происходит в том случае, если элемент уже содержится в множестве. 2. Элементы отсортированы по возрастанию. 3. Никаких ограничений на асимптотику CRUD операций. Скорее всего имею бинарное дерево, реализация классическая. Но в контексте изучения С++, хотелось бы использовать существующие возможности языка. Скорее всего мне необходимо изучить работу с контейнером map, верно ли это? Или можно подойти к данной задаче с другой стороны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 09:23 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Тут set<> достаточно. Только еще свой компаратор придется написать, для сравнения 3-х знаков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 09:28 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Если "проверка до третьего знака" означает фиксированные три знака после запятой, то можно биткарту (vector<bool>) использовать, т.к. точность float всего 7 десятичных знаков, то потребуется 1,25 Мб под биткарту. Проверка наличия будет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 09:46 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Если посмотреть "под углом" fixed-point операций то постановка упрощается. IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 09:56 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Дмитрий, спасибо! Посмотрю сегодня контейнер set. Dima TЕсли "проверка до третьего знака" означает фиксированные три знака после запятой, то можно биткарту (vector<bool>) использовать, т.к. точность float всего 7 десятичных знаков, то потребуется 1,25 Мб под биткарту. Проверка наличия будет быстрее. Я почему думал о сравнении . Этого в данном случае будет недостаточно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 10:13 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДмитрий, спасибо! Посмотрю сегодня контейнер set. Dima TЕсли "проверка до третьего знака" означает фиксированные три знака после запятой, то можно биткарту (vector<bool>) использовать, т.к. точность float всего 7 десятичных знаков, то потребуется 1,25 Мб под биткарту. Проверка наличия будет быстрее. Я почему думал о сравнении . Этого в данном случае будет недостаточно? По твоей изначальной формулировке можно также предположить что интересны первые три знака мантиссы. В данном случае фиксированные три знака после запятой. Эту формулу надо будет в компаратор, пример под спойлером. пример std::set Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 12:03 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dima T, Не работает. Выводит 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 12:27 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SiemarglDima T, Не работает. Выводит 1. У меня работает MS VC 2015 Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 12:32 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Ппц ошибка. Помогла замена abs() на fabs(). Причина в каких то округлениях ( Тестил тут http://cpp.sh ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 12:33 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SiemarglПричина в каких то округлениях ( abs() сначала к целочисленному привел, т.к. должно быть так http://www.cplusplus.com/reference/cstdlib/abs/ int abs ( int n); long int abs ( long int n); long long int abs (long long int n); а MS от себя добавил Код: plaintext 1. потому я и не заметил. Лучше заменить на fabs() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 12:44 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
у вас #include разные http://www.cplusplus.com/reference/cmath/abs/ double abs (double x); float abs (float x); long double abs (long double x); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 13:10 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dima Tа MS от себя добавил Это не MS а С++ добавил от себя )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 13:26 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Я добавлял <cmath>, не помогло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 14:53 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
У меня Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 14:56 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Дмитрий, а почему компаратор реализован именно так, как он реализован? Я думал что это будет классическая функция. Так необходимо для работы с set? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 01:44 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДмитрий, а почему компаратор реализован именно так, как он реализован? Я думал что это будет классическая функция. Так необходимо для работы с set? Это требование стандарта http://en.cppreference.com/w/cpp/concept/Compare ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 02:15 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, спасибо, но я мало что понял по существу, здесь видимо влияет мой незначительный объем знаний в С++. В зарубежных работа по математике для обозначения операторов или левой части уравнения иногда используют lhs, только потому я догадался почему параметры функции названы так, как они названы. Впрочем затем я открыл стандарт, и нашел там аналогичные обозначения :) Не очень понял почему после имени структуры идет двоеточие, но думаю, что смогу разобраться. У меня другой вопрос: сколько значений возвращает данный компаратор и какие эти значения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 04:21 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДмитрий, а почему компаратор реализован именно так, как он реализован? Я думал что это будет классическая функция. Так необходимо для работы с set? Так необходимо для сравнения float . Т.к. это экспоненциальный формат и при вычислении накапливается погрешность в последних разрядах мантиссы, то его нельзя просто сравнить, надо учитывать погрешность. Второй вариант - перед сохранением в set округлять, тогда можно будет вообще без компаратора обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 10:04 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, пример с демонстрацией проблемы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 10:29 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryУ меня другой вопрос: сколько значений возвращает данный компаратор и какие эти значения? два значения. true/false. Просто сравнение "lhs < rhs" http://www.cplusplus.com/reference/set/set/set/ Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 10:38 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercuryДмитрий, а почему компаратор реализован именно так, как он реализован? Я думал что это будет классическая функция. Так необходимо для работы с set? Так необходимо для сравнения float . Т.к. это экспоненциальный формат и при вычислении накапливается погрешность в последних разрядах мантиссы, то его нельзя просто сравнить, надо учитывать погрешность. Второй вариант - перед сохранением в set округлять, тогда можно будет вообще без компаратора обойтись. Да нет, мне непонятен синтаксис реализации, но это мои проблемы - разберусь) Dima Tдва значения. true/false. Просто сравнение "lhs < rhs" Но в том случае если разница между числами меньше погрешности, то происходит возврат 0. Этот момент не очень понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 14:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНо в том случае если разница между числами меньше погрешности, то происходит возврат 0. Этот момент не очень понял Этот функтор должен реализовывать операцию сравнения "меньше". Т.е. если первое число меньше второго, то возвращается true, а иначе (включая равенство в пределах заданной погрешности) - false. ЗЫ. Двоеточие это синтаксис наследования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 14:32 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryDima Tдва значения. true/false. Просто сравнение "lhs < rhs" Но в том случае если разница между числами меньше погрешности, то происходит возврат 0. Этот момент не очень понял ИМХУ: для проверки уникальности надо выполнить сравнение, имея компаратор сравнивающий только на меньше можно сделать так Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 14:33 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Ну, и true==1, false==0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 14:35 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Т.е данный код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. аналогичен такому? Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:04 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
А binary_function судя о всему один абстрактных классов стандартной библиотеки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:07 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Мне не нравится, что он с маленькой буквы, кажется что это функция или метод, а не класс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:07 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Аналогичен, можно покороче Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:09 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryМне не нравится, что он с маленькой буквы, кажется что это функция или метод, а не класс В STL все с маленькой буквы и с подчеркиваниями если несколько слов. Такой стиль выбрали, привыкай. http://www.cplusplus.com/reference/stl/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:12 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Все спасибо C: В целом я понял, детали постараюсь сам разобрать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:24 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА binary_function судя о всему один абстрактных классов стандартной библиотеки На самом деле для реализации компаратора set от нее можно вообще не наследовать. Просто сделайте класс с оператором (). Единственное предназначение этого наследования - подключить вложенные типы, которые дают возможность узнать типы аргументов и результата (если это нужно для реализации шаблона, использующего это класс). В С++11 это можно сделать напрямую, без помощи со стороны класса, поэтому binary_function (и подобные) будет удалена, так что ее не надо даже начинать использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:31 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНа самом деле для реализации компаратора set от нее можно вообще не наследовать. Просто сделайте класс с оператором (). Это я откуда-то скопипастил с binary_function, тут примеры без нее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:34 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryМне не нравится, что он с маленькой буквы, кажется что это функция или метод, а не класс На самом деле, это даже логично, т.к. во многих случаях никакой разницы между использованием класса и функции нет )) Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:38 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryМне не нравится, что он с маленькой буквы, кажется что это функция или метод, а не класс На самом деле, это даже логично, т.к. во многих случаях никакой разницы между использованием класса и функции нет )) Код: plaintext 1. 2. В первом случае может вызываться только конструктор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:40 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВ первом случае может вызываться только конструктор? В первом случае - это создание экземпляра, который потом присваивается в переменную. Что при этом вызывается зависит от типов слева и справа от =. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:43 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryМне не нравится, что он с маленькой буквы, кажется что это функция или метод, а не класс На самом деле, это даже логично, т.к. во многих случаях никакой разницы между использованием класса и функции нет )) Код: plaintext 1. 2. Для полноты, раз тема про функторы: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:51 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryВ первом случае может вызываться только конструктор? В первом случае - это создание экземпляра, который потом присваивается в переменную. Что при этом вызывается зависит от типов слева и справа от =. Создание экземпляра, понятно. Вызывается один из конструкторов, какой именно зависит от типов параметров конструктора. fe: Код: plaintext 1. 2. В данном случае будут созданы экземпляры пользовательского типа, но при этом каждый будет создан образом, описанным в своем конструкторе. Но как на создание экземпляра может повлиять T_L? Или я что-то не так понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:52 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Вася УткинДля полноты, раз тема про функторы: Код: plaintext 1. 2. 3. Да, пропустил. )) SashaMercuryНо как на создание экземпляра может повлиять T_L? Никак. Но при присвоении, в зависимости от задействованных типов, может еще вызваться оператор конверсии типа и оператор присвоения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:57 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Спасибо, я узнал много нового. Нужно более плотно читать книги по С++, благо они у меня есть( Меня гонят спать. Всем хороших выходных C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 16:49 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Переписал одну функцию, для расчёта динамики частного процесса. В качестве структуры данных использовал последовательный контейнер vector. Пока вижу одни плюсы, очень удобно и лично я пока очень доволен. Неужели нет никаких подводных камней и всё должно быть так просто? Не нужно в разных местах кода добавлять блоки отвечающие за освобождение памяти, код становится читабельней. И при этом, возможность обратиться к элементу вектора как к элементу массива сохранилась. Но самое главное, код стал читабельней и его размер уменьшился. И теперь я не боюсь что забуду освободить память. Но всё-таки, за всё нужно платить, должны быть минусы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2016, 11:22 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНо всё-таки, за всё нужно платить, должны быть минусы Минусы проявляются в режиме отладки, когда отключена оптимизация и код не инлайнится - работает медленнее т.к. [] в этом случае - дополнительный вызов функции. А в стандартном режиме, никаких минусов,в по сравнению с массивом созданным через malloc, нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2016, 15:22 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Подводный камень - в интеграции. Чем дальше ты уходишь от С к С++ c STL тем сложнее тебе сделать callback твоей функции из Java (к примеру). Возможно я это говорю не к времени и не к месту но это тоже недостаток который при проектировании нужно знать и учитывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2016, 15:44 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonПодводный камень - в интеграции. Чем дальше ты уходишь от С к С++ c STL тем сложнее тебе сделать callback твоей функции из Java (к примеру). JNI обертки можно компилировать как С так и С++. Стыдно не знать ))) Поэтому никакой практической разницы конкретно в этом вопросе нет. Если же говорить вообще, то написание С-оберток к С++ классам настолько тривиально, что это - небольшой оверхед по сравнению с теми объемами отладки которые снимаются с программиста в результате того что ему не нужно думать об управлении памятью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2016, 16:10 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, у нас разговор идет в контексте std::vector. Верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2016, 16:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonAnatoly Moskovsky, у нас разговор идет в контексте std::vector. Верно? Верно. Конкретно между vector и просто буфером нет никакой практической разницы. Потому что vector это и есть буфер + автоматическое удаление. Если вы например хотите доступ к буферу из ЯП который поддерживает только С АПИ, то код оберток будет практически совпадать один в один что для С что для С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2016, 16:23 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, ну представь что Саша закодил некое ПО активно используя std::vector как базовую единицу для callbacks. Он передает и принимает аргументы в этом шаблоне. Далее я. Заметя что это ПО замечательное, и мне очень нужно я хочу его в своё приложение интегрировать. Моё приложение написано на Java. И дальше я весь превратился в слух и ожидаю от Анатолия различных лайф-хаков или хитростей как мне дальше быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2016, 17:25 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mayton, Я же написал. Разницы между интерфейсным кодом с буфером и с вектором практически не будет. Поэтому никаких дополнительных хаков из-за того, что это вектор, не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2016, 17:30 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mayton, vector<> это просто массив, все его подводные камни это перемещение в памяти при увеличении в размере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2016, 21:12 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
а как вам такая библиотечка для Си? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2016, 21:50 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)а как вам такая библиотечка для Си? Как остроумный прикол - сойдет )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2016, 22:25 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Ладно. Пускай Саша даст больше сведений и тогда я разовью мысль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2016, 22:36 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
maytonЛадно. Пускай Саша даст больше сведений и тогда я разовью мысль. Да какие там сведения. У мне была функция, алгоритм которой является в целом классическим случаем динамического программирования. Необходимо было создать динамический массив, из функции можно было выйти в разных точках, соответственно в каждой точке я должен был дублировать освобождение памяти. Кроме того, размер массива не был известен мне заранее, т.о. мне необходимо было использовать либо realloc либо аналог из С++/STD(без STD, видимо вызывать new с повторным копированием). Кроме того, необходимо было постоянно сопровождать размер массива. Перечисленные факторы приводят к тому, что мне труднее анализировать сам алгоритм, я отвлекаюсь на побочные факторы. Потому я решил открыть стандарт и BS в местах, которые посвящены контейнерам и прочитать информацию о vector конкретно. И использовал его. PS Кроме того, использование компаратора в функции сортировки просто шикарная идея, я конечно это и в Си делал(передавал указатель на функцию в качестве параметра другой функции), но очень здорово, что это сделано на уровне языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2016, 01:52 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Неудобно только чтение данных из какого-либо потока в vector. Вероятно для таких задач в С++ также существует какой-то стандартный механизм, но пока я не дошел до него. Делаю примерно следующим образом, но это через одно место называется Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2016, 08:49 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
см. istream_iterator и back_inserter, но вполне можно обойтись и Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2016, 09:33 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
wstсм. istream_iterator и back_inserter, но вполне можно обойтись и Код: plaintext 1. 2. 3. 4. Тоже некрасиво, было бы здорово вообще инкапсулировать циклы. Позже посмотрю ссылки. Спасибо всем за ваши мнения о контейнер vector :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2016, 09:52 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018439]: |
0ms |
get settings: |
12ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
368ms |
get tp. blocked users: |
1ms |
| others: | 285ms |
| total: | 764ms |

| 0 / 0 |
