Задача на копирование списка

Есть однонаправленный список из структур. В нём random указывает на какой-то еще элемент этого же списка. Требуется написать функцию, которая копирует этот список с сохранением структуры (т.е. если в старом…

Обложка: Задача на копирование списка

Что не так в этом отрывке кода на С++?

Есть следующий код, но в нём имеется некоторая проблема. operator int() const { return *this; }…

Обложка: Что не так в этом отрывке кода на С++?
Обложка: Pure virtual function call

Pure virtual function call

Вопрос по С++. Что за ошибка «pure virtual function call»? В какой ситуации она может быть сгенерирована? Предоставьте минимальный код, приводящий к ней. Те, кто столкнулись с этой ошибкой в…

Обложка: 123 задачи с IT-собеседований с разбором решений

123 задачи с IT-собеседований с разбором решений

Самые популярные задачи с IT-собеседований — более 100 логических задач, IT-кейсов и заданий по разработке для профессиональных программистов (с ответами!).

Бьерн Страуструп о первом компиляторе C++ и будущем языка

Первому компилятору C++ — CFront 1.0 — недавно исполнилось 30 лет. В этом интервью Бьерн Страуструп рассказывает о том, что поменялось с тех пор, и каким он хотел бы видеть…

Обложка: Трассировщик лучей на визитке

Трассировщик лучей на визитке

Рассказывает Фабиен Санглард, автор блога fabiensanglard.net Недавно в интернете я наткнулся на трассировщик лучей на визитке Пола Гекберта. Для тех, кто не в курсе: это очень известная задача, изначально предложенная…

Обложка: Файл, который нужно включить в проект на Си или С++ перед увольнением

Файл, который нужно включить в проект на Си или С++ перед увольнением

Пользователь Aras Pranckevičius поделился на github файлом preprocessor_fun.h, который рекомендуется включать в репозиторий проекта перед увольнением с работы. Некоторые строчки несут в себе слишком много боли, слабонервным рекомендуем не смотреть.

Оптимизация в GCC — ответы на вопросы викторины

Рассказывает автор блога ridiculousfish.com В этой статье даны ответы на 6 вопросов из викторины по оптимизациям компилятора GCC. В каждом по две вставки кода. Первая вставка иллюстрирует код до некой оптимизации, вторая…

Обложка: Различия Qt Creator и Visual Studio 2015

Различия Qt Creator и Visual Studio 2015

Рассказывает Тимофей Седов, разработчик интеллектуальной ассистентки Никки В этой записи хотелось бы поделиться своими впечатлениями от IDE Visual Studio. С тех пор, как мы начали разрабатывать универсальную версию нашей интеллектуальной…

Вывод последних K строк входного файла на C++

Можно действовать прямо — подсчитать количество строк (N) и вывести строки с N-K до N. Для этого понадобится дважды прочитать файл, что очень неэффективно. Давайте найдем решение, которое потребует прочитать…

Сопоставление хэш-таблицы и map в С++

Сопоставьте хэш-таблицу и mар из стандартной библиотеки шаблонов (STL). Как организована хэш-таблица? Какая структура данных будет оптимальной для небольших объемов данных? В хэш-таблицу значение попадает при вызове хэш-функции с ключом.

Почему деструктор базового класса должен объявляться виртуальным?

Давайте разберемся, зачем нужны виртуальные методы. Рассмотрим следующий код: class Foo { public: void f(); }; class Bar : public Foo { public: void f(); } Foo *p = new…

Безопасность потоков в С++

Допустим, вы пишете конвейер, в котором 2 потока, используя общий буфер, обрабатывают данные. Поток-producer эти данные создает, а поток-consumer их обрабатывает (Producer–consumer problem). Следующий код представляет собой самую простую модель:…

Обложка: Безопасность потоков в С++

Работа виртуальных функций в C++

Виртуальная функция определяется vtable (виртуальной таблицей). Если какая-либо функция класса объявлена как виртуальная, создастся vtable, которая хранит адреса виртуальных функций этого класса. Для всех таких классов компилятор добавляет скрытую переменную…

Проклятие неинициализированных переменных

Позволять программистам использовать неинициализированные переменные — большая ошибка со стороны разработчиков языка. Например, это может привести к значению undefined в JavaScript, которое чревато сопутствующими ошибками. Такую оплошность легко совершить и…

Обложка: STL: стандартная библиотека шаблонов С++

STL: стандартная библиотека шаблонов С++

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