Re[41]: Исповедь C++ника
От: Тёмчик Австралия жж
Дата: 29.12.20 22:49
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Положить в массив, отсортировать и std::lower_bound() на него.


Ну это O(log(N)). Хэш таблица быстрее.
Re[40]: Исповедь C++ника
От: Тёмчик Австралия жж
Дата: 29.12.20 22:55
Оценка: :))
Здравствуйте, landerhigh, Вы писали:

L>>>Что касается структур данных, то тут можно вспомнить классическое "правило" 80/20: >80% кейсов покрываются именно векторами, хеш-мапами и упорядоченными мапами.

S>>Золотые слова. Вот прям спасибо.
Просто состим и ты нихрена не понимаете в алгоритмах. А потом ещё обижаетесь на мою формулировку "не понимают в алгоритмах, но мастурбируют на шаблоны".

L>Кстати, добавлю — недавно понадобилось иметь std::map или std::set, который заполняются лишь однажды и потом почти никогда не модифицируются, но в котором нужно очень иногда искать по ключу, но постоянно приходится просто итерировать.

L>В закромах буста обнаружился flat_map и flat_set. Вот прям что надо было.

flat_map is similar to std::map but it's implemented like an ordered vector.




Аналог LinkedHashMap ещё не завезли к вам?
Re[38]: Странные конторы
От: Тёмчик Австралия жж
Дата: 30.12.20 00:25
Оценка:
Здравствуйте, so5team, Вы писали:

S>Проваленного, скорее всего, из-за плохого владения плюсами


Это была 2я попытка на C++ в 2016, переделанная с жавы. 1я на жаве в 2011, с таким же успехом.
Re[42]: Исповедь C++ника
От: Тёмчик Австралия жж
Дата: 30.12.20 02:03
Оценка:
Здравствуйте, landerhigh, Вы писали:

SVZ>>Делается легко и непринуждённо.

+1

L>Но раз велосипед уже изобретен в бусте, то почему бы его и не использовать?

Потому, что бинарный поиск нужно знать, чтоб от зубов отскакивало. Даже в STL есть lower/upper bound, и оно работает даже без всяких векторов.
Re[42]: Исповедь C++ника
От: Stanislav V. Zudin Россия  
Дата: 30.12.20 04:54
Оценка:
Здравствуйте, Тёмчик, Вы писали:

SVZ>>Положить в массив, отсортировать и std::lower_bound() на него.


Тё>Ну это O(log(N)). Хэш таблица быстрее.


Тёма, ты путаешь с явой. Упомянутые map и set это дерево. Поэтому не быстрее.
_____________________
С уважением,
Stanislav V. Zudin
Re[43]: Исповедь C++ника
От: Тёмчик Австралия жж
Дата: 30.12.20 06:06
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Тёма, ты путаешь с явой. Упомянутые map и set это дерево. Поэтому не быстрее.


Это я знаю, там было rbtree.
Есть unordered_map и можно по нему итерировать.
Кстати, это сравнительно поздняя "фича", но лучше поздно, чем никогда.
Отредактировано 30.12.2020 6:10 Артём . Предыдущая версия .
Re[28]: Исповедь C++ника
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 30.12.20 06:50
Оценка:
Здравствуйте, so5team, Вы писали:

Тё>>sentinel иницировать в конструкторе:

Тё>>sentinel.next = sentinel.prev = sentinel.

S>За такие инициализации в конструкторе в C++ со времен 1990-х по рукам бъют. Но откуда вам знать-то.


Хм, это почему же? Где ещё такую инициализацию делать, как не в конструкторе списка?

(остальное потом рассмотрим)
The God is real, unless declared integer.
Re[18]: Исповедь C++ника
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 30.12.20 07:04
Оценка: +1
Здравствуйте, so5team, Вы писали:

S>Кроме того, приведенный выше код можно считать документально зафиксированным подтверждением того, что местный Тёмчик говнокодер, неспособный в простейшие структуры данных. Ибо такая наивная реализация изъятия элемента из двусвязного списка без проверки на null значений node.prev/node.next -- это про*б сравнимый с неспособностью развернуть строку. Тёмчик, почему меня не удивляет факт того, что вы говнокодер?


А вы нечитатель, после того, как слово "sentinel node" промелькнуло в этой подветке минимум пять раз. Тут про*б ваш, а не его.

(В основном согласен с остатком письма. В целом в тред не хочу глубоко влезать, слишком много бессмысленных метаний с обеих сторон.)
The God is real, unless declared integer.
Re[29]: Исповедь C++ника
От: so5team https://stiffstream.com
Дата: 30.12.20 07:08
Оценка:
Здравствуйте, netch80, Вы писали:

Тё>>>sentinel иницировать в конструкторе:

Тё>>>sentinel.next = sentinel.prev = sentinel.

S>>За такие инициализации в конструкторе в C++ со времен 1990-х по рукам бъют. Но откуда вам знать-то.


N>Хм, это почему же? Где ещё такую инициализацию делать, как не в конструкторе списка?


В списке инициализации конструктора, а не в теле конструктора. Т.е.
sentinel::sentinel() : next_{this}, prev_{this} {}

вместо
sentinel::sentinel() {
  next_ = prev_ = this;
}

и, тем более, вместо:
subscription_storage::subscription_storage() {
  sentinel_.next_ = sentinel_.prev_ = &sentinel;
}

Надеюсь, почему атрибутам следует присваивать значения в списке инициализации, а не в теле конструктора, объяснять не нужно.
Re[19]: Исповедь C++ника
От: so5team https://stiffstream.com
Дата: 30.12.20 07:10
Оценка:
Здравствуйте, netch80, Вы писали:

N>А вы нечитатель, после того, как слово "sentinel node" промелькнуло в этой подветке минимум пять раз. Тут про*б ваш, а не его.


100% мой. По ссылке Тёмчика не ходил, а в самой ссылке обратил внимание только на финальную часть, которая про linked-list-implementation.
Re[30]: Исповедь C++ника
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 30.12.20 07:37
Оценка: +1
Здравствуйте, so5team, Вы писали:

Тё>>>>sentinel иницировать в конструкторе:

Тё>>>>sentinel.next = sentinel.prev = sentinel.
S>>>За такие инициализации в конструкторе в C++ со времен 1990-х по рукам бъют. Но откуда вам знать-то.
N>>Хм, это почему же? Где ещё такую инициализацию делать, как не в конструкторе списка?
S>В списке инициализации конструктора, а не в теле конструктора. Т.е.
[...]
S>Надеюсь, почему атрибутам следует присваивать значения в списке инициализации, а не в теле конструктора, объяснять не нужно.

Ну в данном случае откровенно без разницы. Разве что чтобы "не сбивать руку".
The God is real, unless declared integer.
Re[31]: Исповедь C++ника
От: so5team https://stiffstream.com
Дата: 30.12.20 08:31
Оценка:
Здравствуйте, netch80, Вы писали:

N>Ну в данном случае откровенно без разницы.


Это отличный индикатор уровня владения инструментом. Такие вещи должны быть доведены до автоматизма, как и расстановка const-ов и nodiscard в должных местах.
Re[32]: Исповедь C++ника
От: Тёмчик Австралия жж
Дата: 30.12.20 10:16
Оценка:
Здравствуйте, so5team, Вы писали:

N>>Ну в данном случае откровенно без разницы.


S>Это отличный индикатор уровня владения инструментом. Такие вещи должны быть доведены до автоматизма, как и расстановка const-ов и nodiscard в должных местах.


Безотносительно уровня владения инструментом, утечки памяти в связи с исключением в конструкторе, там быть не может. Вы ведь помните, из-за чего все эти прыжки со скакалкой в C++, правда?
Re[33]: Исповедь C++ника
От: so5team https://stiffstream.com
Дата: 30.12.20 10:24
Оценка:
Здравствуйте, Тёмчик, Вы писали:

S>>Это отличный индикатор уровня владения инструментом. Такие вещи должны быть доведены до автоматизма, как и расстановка const-ов и nodiscard в должных местах.


Тё>Безотносительно уровня владения инструментом,


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

Тё>утечки памяти в связи с исключением в конструкторе, там быть не может. Вы ведь помните, из-за чего все эти прыжки со скакалкой в C++, правда?


Продолжаете расписываться в непонимании C++? Верной дорогой.

Списки инициализации важны не только для обеспечения exception safety (как и exception safety важна не только для предотвращения утечек памяти). Но и для того, чтобы в теле конструктора не задействовать случайно неинициализированные должным образом поля объекта. Что запросто может произойти по мере эволюции кодовой базы. Поэтому тот, кто не использует в C++ списки инициализации, тот, скорее всего, просто еще не осознал, что "уставы пишутся кровью". Вот как вы.

Возможно, имей вы опыт развития продукта в течении долгого времени, то не несли бы такой откровенной херни. Но ведь вы же как попрыгунья-стрекоза: "интересно делать новые проекты, изучать новые технолигии, (старые) алгоритмы, и т.д."
Re[34]: Исповедь C++ника
От: Максим Россия  
Дата: 30.12.20 10:36
Оценка:
S>Списки инициализации важны не только для обеспечения exception safety (как и exception safety важна не только для предотвращения утечек памяти). Но и для того, чтобы в теле конструктора не задействовать случайно неинициализированные должным образом поля объекта. Что запросто может произойти по мере эволюции кодовой базы. Поэтому тот, кто не использует в C++ списки инициализации, тот, скорее всего, просто еще не осознал, что "уставы пишутся кровью".

В С++ считается хорошем стилем все поля класса инициализировать через списки инициализации? Добавил поле — автоматически добавил : m_value(a_value) во все конструкторы? Просто присваивания в теле конструктора считаются более error prone?
Errare humanum est
Re[34]: Исповедь C++ника
От: Тёмчик Австралия жж
Дата: 30.12.20 10:38
Оценка:
Здравствуйте, so5team, Вы писали:

S>В данном конкретном вашем случае нет "безотносительно". Вы откровенно не владеете инструментом, о возможностях и перспективах которых здесь делаете столь громкие заявления.


Тё>>утечки памяти в связи с исключением в конструкторе, там быть не может. Вы ведь помните, из-за чего все эти прыжки со скакалкой в C++, правда?


S>Продолжаете расписываться в непонимании C++? Верной дорогой.


S>Списки инициализации важны не только для обеспечения exception safety (как и exception safety важна не только для предотвращения утечек памяти). Но и для того, чтобы в теле конструктора не задействовать случайно неинициализированные должным образом поля объекта. Что запросто может произойти по мере эволюции кодовой базы. Поэтому тот, кто не использует в C++ списки инициализации, тот, скорее всего, просто еще не осознал, что "уставы пишутся кровью". Вот как вы.


Не вижу в том коде возможности "задействовать случайно неинициализированные должным образом поля объекта". У вас профессиональная деформация, наверное. Учите лучше алгоритмы, ну там, хоть строку чтоб могли развернуть, это всё.

S>Возможно, имей вы опыт развития продукта в течении долгого времени, то не несли бы такой откровенной херни. Но ведь вы же как попрыгунья-стрекоза: "интересно делать новые проекты, изучать новые технолигии, (старые) алгоритмы, и т.д."

Предпочитаю брать самую сложную фичу "если не я, то кто", и выполнять её. Потом можно оставить состимам на суппорт.

PS Приглашаю на битву в http://rsdn.org/forum/flame.comp/7915185.flat
Автор: Тёмчик
Дата: 30.12.20
.
Re[34]: Исповедь C++ника
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 30.12.20 10:38
Оценка: :)))
Здравствуйте, so5team, Вы писали:

S> Но ведь вы же как попрыгунья-стрекоза: "интересно делать новые проекты, изучать новые технолигии, (старые) алгоритмы, и т.д."


А вот тут обидно было (вспоминая портянку языков с которыми работал последние 10 лет )
Отредактировано 30.12.2020 10:48 kaa.python . Предыдущая версия .
Re[35]: Исповедь C++ника
От: so5team https://stiffstream.com
Дата: 30.12.20 10:47
Оценка: 2 (1)
Здравствуйте, Максим, Вы писали:

М>В С++ считается хорошем стилем все поля класса инициализировать через списки инициализации? Добавил поле — автоматически добавил : m_value(a_value) во все конструкторы?


Да. К счастью, начиная с C++11 дефолтными значениями можно инициализировать прямо по месту объявления поля. И в C++11 делегирующие конструкторы позволяют уменьшить количество мест в самих конструкторах, где нужно что-то инициализировать явно.

Неинициализированные поля можно оставлять только по показаниям профайлера.

М>Просто присваивания в теле конструктора считаются более error prone?


Да.

http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-initialize
Re[35]: Исповедь C++ника
От: so5team https://stiffstream.com
Дата: 30.12.20 10:48
Оценка:
Здравствуйте, kaa.python, Вы писали:

S>> Но ведь вы же как попрыгунья-стрекоза: "интересно делать новые проекты, изучать новые технолигии, (старые) алгоритмы, и т.д."


KP>А вот тут обидно было (вспоминая порядку языков с которыми работал последние 10 лет )


Так ведь некоторые за год умудряются вобрать в себя больше, чем иные за три. Так что тут все индивидуально.
Re[36]: Исповедь C++ника
От: Тёмчик Австралия жж
Дата: 30.12.20 10:52
Оценка:
Здравствуйте, so5team, Вы писали:

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

Самокритично.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.