Как стать автором
Обновить
2
0

Пользователь

Отправить сообщение
Обращаться к квадрату, как к прямоугольнику можно только до тех пор, пока мы не захотим изменить параметры квадрата. Представьте, что у вас есть функция, которая в процессе работы сужает фигуру по высоте в два раза.
void complexFunction(Rectangle &r) {
   // ...
    r.setHeight(r.getHeight() / 2 );
  // ...
}

Очевидно, что любой прямоугольник останется валидным прямоугольником после такой операции. А вот квадрат уже не останется квадратом (нужно пропорционально изменить ширину) — нарушение LSP. И я не знаю, как эту ситуацию решить — далеко не все операции, которые оставят прямоугольник прямоугольником, оставят квадрат квадратом.
Еще могу порекомендовать почитать вот эту статью, если заинтересовала тема арифметики без UB — не только сложение разбирается, но и другие операции. Да и вообще, весь ресурс — отличный справочник по различным UB и секьюрному кодингу.
Хм, как, однако, много изменилось с альфы. Буквально пару месяцев назад(0.0.17) работа с bson вообще по-другому выглядела — использовалось куча
бойлерплейтных билдеров
.UpdateOne(nil,
		bson.NewDocument(bson.EC.String("_id", access.UserID)),
		bson.NewDocument(
			bson.EC.SubDocumentFromElements("$addToSet",
				bson.EC.SubDocumentFromElements("documents",
					bson.EC.Array("$each", documents),
				),
			),
			bson.EC.SubDocumentFromElements("$setOnInsert",
				bson.EC.String("_id", access.UserID),
			),
		),
		updateopt.Upsert(true),
)


Рад, что все стало намного аккуратнее. Из хотелок — не появилось ли возможности оборачивать кастомные структуры в bson.D? Например, что бы можно было писать что-то наподобие

partialUpdate := MyCustomStruct { Note: "New Note" }
update:= bson.D { {"$set" , &partialUpdate}} 
filter := MyCustomStruct{ ID: "some-id" }
collection.UpdateOne(context.TODO(), filter, update)


Я читал несколько текстов про переводы Властелина Колец(пример) — создалось впечатление, что оригинал по смысловой нагрузке будет заведомо очень далек от любого(даже самого бережного) перевода.
Интересный факт: std::basic_string::npos — получается методом signed -> unsigned преобразования. Из cppreference:
static const size_type npos = -1;	

Так что категорично ругаться на все такие преобразования не стоит точно)
Не хочу никому указывать, но, по-моему, вывод должен быть таким: «Потрудитесь внимательно прочитать документацию к используемым инструментам». Ну правда, первая же ссылка в Google по запросу «std::map comparator» содержит информацию о финальном варианте.
Мне кажется, что тут оптимально будет вызывать не resize() + push_back(), а reserve() + emplace_back() — нет лишних копирований и вызовов дефолтных конструкторов, еще и перемещение в push_back() экономится.
Стоит отметить, что std::sort — это не просто quicksort, это (насколько мне известно) интроспективная сортировка, т.е. комбинация из quicksort, heapsort и insertion sort. Вывод такой можно сделать: начинайте выпендриваться с алгоритмов, а не с ассемблера)
Имхо, если в качестве первого языка изучать Си, то нужно параллельно читать что-то вроде «Операционных систем» Таненбаума, только в сильно упрощенном виде( обычно на первых курсах университета это изучается под общим названием «информатика»). Такой способ очень сильно поднимет техническую грамотность, позволяет разобраться, как вообще компьютер работает. К сожалению, это не самое веселое занятие — далеко не всем интересно читать про указатели, системные вызовы и строение памяти, пока другие на всяких js и C# пишут игры на Unity.
Может быть, не стоит спорить об определениях? Вам же не интересно спорить, о, например, букве P. А ведь у нее далеко не одно значение — тут и вес, и вектор поляризации, и давление. Еще так выглядит буква латинского алфавита. И русского алфавита. Возможно, где-нибудь она еще что-нибудь обозначает.
Если лепить ярлык «информация» на все подряд, то, конечно, неразбериха будет. Замените слово «информация» в посте на букву Р. Точки зрения физики на букву Р нет — есть понятия, которые этой буквой обозначают. И в математике есть понятия, которые этой буквой обозначают. Иногда коллизия происходит — как с «информацией» — но при этом точки зрения физики на полиномиальную сложность алгоритмов никто не ищет, и бессмысленно ее требовать.
Если я не ошибаюсь, то добавление элемента в конец массива корректнее рассматривать как амортизированное О(1), а не как «иногда О(1), иногда О(N)» — если под массивом понимать модифицированный сишный массив (или С++-ный вектор).
Учитывая, что максимальный размер массива ограничен, то ограничено и количество реаллокаций памяти под массив, и количество копирований элементов. Следовательно, можно ограничить сверху стоимость одного добавления константой С (для разных начальных размеров массива она будет разной). Время добавления в конец массива = О(С)= О(1). Конечно, стоит помнить, что это не совсем обычная константа, но О(N) является еще более грубой оценкой.

Странно, мне, например, профит от деревьев поиска стал очень явно понятен как раз из университетской лабораторной — посчитать для каждого слова из файла, сколько раз оно употребляется, и записать все слова с посчитанной информацией в другой файл( тема работы, кстати, к деревьям вообще никак не относилась).
std::map из стандартной библиотеки С++ отлично показал, чем логарифмическое время вставки и поиска отличается от линейного, когда во входном файле оказалось 700 тысяч слов.
Закончил школу в 2015 году. Астрономии не было. Честно говоря, очень сомневаюсь, что обязательная астрономия хорошо впишется в школьную программу в ее текущем виде.
В старших классах это самый настоящий «лишний предмет» — один час в неделю, который интересен далеко не всем, пользы в плане «набрать лучший результат на ЕГЭ\олимпиаде» не приносит, но тем не менее увеличивает учебную нагрузку.
В средней школе она намного лучше выглядит, но тут возникает другая проблема — нужны нормальные учителя, которые не в каждой школе есть. Плюс ко всему, физики еще никто толком не знает, математики тоже. Возможно, как факультативный предмет, в тех школах, которые могут себе позволить хорошего педагога на нее выделить, астрономия будет хорошо смотреться, иначе — оставит очень странные впечатления.
P.S. Ни разу не утверждаю, что астрономия — лишние знания и знать ее не нужно. Есть много важных и интересных предметов (например, основы когнитивной психологии), которые хотелось бы поместить в школьную программу, но это не такое удачное и легко осуществимое решение, как иногда кажется.
К сожалению, если отбросить подобные «понятные нам ограничения», то от попытки научного анализа текущей ситуации с поиском инопланетной жизни, мы перейдем к фантастике (которая, конечно, очень занимательна и ко всяким интересным рассуждениям очень располагает). Размышления вида «А что, если можно разгоняться до сверхсветовой скорости...» не сильно отличаются от «Допустим, существует магия...».
Интересный факт: сравнение this с нулем есть даже у Страуструпа в его «Programming — Principles and Practice Using C++», причем в относительно свежем (2014 г) издании.
Ничто так не мотивирует изучать иностранный язык, как новые российские законы

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность