YakovSava, тут 100% висячий указатель. string локальная переменная уничтожается по выходу из функции. А дальше программа может упасть, прочитать мусор, или отработать без ошибок, непредсказуемо - это же UB.
RTX975, ученый изнасиловал журналиста же. Если почитать оригинальную ссылку, то там английским по белому написано "But the main engine will remain proprietary for the foreseeable future".
floppa322, А вот это уже интересный момент. В этом случае, да. выделить непрерывный кусок памяти и руками заполнять объекты - может быть даже имеет смысл. Это важное уточнение, его стоит дописать к вопросу.
Но я бы завел пустой вектор и делал в нем emplace_back с нужными параметрами. При чем, у вектора можно сделать reserve сначала и тогда перевыделений памяти не будет. Внутри, конечно, в итоге будет простыня, похожая на то, что у вас вначале, но не в библиотечном коде лучше такого не писать.
Я не понимаю, как вы сравниваете эти два способа. Первый, хоть и через жопу, выделяет массив из Point. Второй же выделяет массив указателей (на Point, но это не важно).
Можно было бы сравнивать с: Point * points = new Point[SIZE];
BelDm, ну там же явно скзано, что оператор поисваивания должен возвращать ссылку на this. А у вас тип возвращаемого значения - просто объект, а не ссылка. Амперсант туда воткните.
BelDm, ну читайте же сообщение об ошибке. Там явно сказано, какие штуки классу надо определить и почему (указатели в классе - их просто копировать скорее всего опасно).
Quark, Скорость надо мерять только в релизе. Посмотрите, может тоже мгновенно отрабатывает.
Ну а так, конечно, много где можно углы срезать.
Например, у вас не линейный алгоритм, а квадратичный в худшем случае - если несвязанных компонент много.
Вместо основного цикла
while(true) {
for () // нашли непомеченную вершину
BFS();
}
Надо делать:
for () {
if (вершина не помечена) {
BFS();
}
}
Еще в BFS можно Output переиспользовать вместо queue. Надо только индекс "начала очереди" завести. В итоге вы просто циклом проходитесь по Output, добавляя номера в конец. Это в 2 раза меньше аллокаций памяти.
Ну и unordered_map из строки - это за гранью. Реализуйте уж хеш для своего типа. Или на худой конец, используйте просто map, на таких количествах он может не сильно проигрывать unordered_map.
432ffqfw, F не может стоять в позиции 8,0. Потому что строки с номером 8 нет. Надо поставить знак < при сравнении с 8.
Ах да, еще ошибку не заметил. В цикле сравнения надо объединять через &&, а не запятые. Запятая - это оператор, который выполняет оба действия и возвращает последнее. Поэтому ++ через запятые делать и нужно, а вот сравнения - нельзя. Первое сравнение просто проигнорируется.