Любая программа состоит из данных и алгоритмов их обработки. Для написания программ на C++ в начале 90-х годов прошлого века Александр Степанов с коллегами разработал библиотеку STL. Я, Михаил Полукаров из команды разработки VK Teams, заглянул под капот этой библиотеки чтобы разобраться, как правильно ей пользоваться, в каких случаях лучше использовать другие библиотеки, а в каких стоит написать что-то своё.
Рубрика «stl»
Особенности реализации STL в Clang, GCC и Microsoft С++
2022-04-13 в 10:01, admin, рубрики: c++, stl, Блог компании VK, Программирование, С++Все, что вы должны знать о std::any
2020-05-24 в 11:09, admin, рубрики: Any, c++, c++17, stl, STL containers, перевод, Программирование, системное программированиеПривет! Представляем вашему вниманию перевод статьи «Everything You Need to Know About std::any from C++17» автора Bartlomiej Filipek.
С помощью std::optional
вы можете хранить один какой-то тип. С помощью std::variant
вы можете хранить несколько типов в одном объекте. И С++17 предоставляет нам еще один такой оберточный тип — std::any
, который может хранить что угодно, оставаясь при этом типобезопасным.
Читать полностью »
Объединяем функции логическими операторами в C++
2020-03-10 в 13:05, admin, рубрики: c++, stl, Блог компании OTUS. Онлайн-образование, лямбды, ПрограммированиеВ преддверии старта занятий в новом потоке группы «Разработчик С++» подготовили перевод интересного материала.
Большинство алгоритмов STL в C++ используют всего лишь одну функцию для выполнения некоторой работы над коллекцией. Например, чтобы извлечь все четные числа из коллекции, мы можем написать такой код:
auto const numbers = std::vector<int>{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
auto results = std::vector<int>{};
std::copy_if(begin(numbers), end(numbers), back_inserter(results), isMultipleOf2);
Предполагая, что у нас есть функция isMultipleOf2
:
bool isMultipleOf2(int n)
{
return (n % 2) == 0;
}
(В этом конкретном случае было бы проще использовать лямбду, но для моих целей удобнее написать простую функцию, чтобы проиллюстрировать следующую мысль, которая применяется к более сложным функциям, таким как те, которые используются при реализации счетчика слов в верблюжьей нотации).Читать полностью »
И ещё о сортировках
2019-09-15 в 18:04, admin, рубрики: boost, BSD, c++, processing, stl, Алгоритмы, алгоритмы сортировки, Программирование, сортировки, строки, структуры данныхИ ещё о сортировках
Рискну опять поднять эту тему. Начну со ссылки на статью Михаила Опанасенко (oms7), очень впечатляющую по объёмам проделанной работы, а также по количеству приведёных ссылок. Свой материал начал готовить, не зная об этой публикации, что впоследствии, после ознакомления привело к необходимости его существенной переработки. Для тех, кто уже прочитал эту статью, сообщаю, что в моём материале, исследуются более разнообразные по типам данные, в частности, строки и вещественные числа, используются библиотеки boost и bsd, а также затрагиваются некоторые другие отсутствующие в названной статье темы.
Читать полностью »
Создаем на C++ выразительные умные указатели для удаленной памяти
2019-09-14 в 8:27, admin, рубрики: .net, c++, memory, stl, Алгоритмы, Блог компании Издательский дом «Питер», ооп, Программирование, С++, указателиПривет!
Сегодня мы публикуем перевод интересного исследования о работе с памятью и указателями в C++. Материал немного академический, но явно будет небезынтересен читателям книг Галовица и Уильямса.
Следите за рекламой!
Читать полностью »
STL интерфейс Berkeley DB
2019-07-20 в 11:01, admin, рубрики: berkeley db, c++, cmake, nosql, nosql базы данных, stl, ПрограммированиеПривет. Не так давно для одного моего проекта понадобилась встраиваемая база данных, которая бы хранила элементы в виде ключ-значение, обеспечивала поддержку транзакций, и, опционально, шифровала данные. После непродолжительных поисков, я наткнулся на проект Berkeley DB. Кроме нужных мне возможностей, эта БД предоставляет STL-совместимый интерфейс, который позволяет работать с базой данных, как с обычным (почти обычным) STL-контейнером. Собственно про этот интерфейс речь пойдет ниже.
Данная статья определяет основные понятия стандартной библиотеки С++. Она приводится для того чтобы на неё ссылаться в дальнейшем.
Наибольшей частью стандартной библиотеки С++ является библиотека STL (Standard Template Library – Стандартная Библиотека Шаблонов). Библиотека STL содержит пять основных видов компонентов:
- контейнер (container): управляет набором объектов в памяти.
- итератор (iterator): обеспечивает для алгоритма средство доступа к содержимому контейнера.
- алгоритм (algorithm): определяет вычислительную процедуру.
- функциональный объект (function object): инкапсулирует функцию в объекте для использования другими компонентами.
- адаптер (adaptor): адаптирует компонент для обеспечения различного интерфейса.
Стандартная библиотека С++ предлагает не только набор классов, но также определяет способ написания программ. В рамках данной статьи рассматриваются общие требования к реализации программ при помощи STL.
Рассмотрим следующую задачу:
Считать из файла input.txt массив целых чисел, разделенных пробельными символами. Отсортировать их и записать в файл output.txt
Как мы перевели 10 миллионов строк кода C++ на стандарт C++14 (а потом и на C++17)
2018-11-13 в 7:26, admin, рубрики: 1С, boost, c++, clang, folly, gcc, stl, stlport, Visual Studio, Блог компании 1С, компиляция, оптимизация кода, Разработка под Linux, Разработка под MacOS, разработка под windowsНекоторое время назад (осенью 2016), при разработке очередной версии технологической платформы 1С:Предприятие внутри команды разработки встал вопрос о поддержке нового стандарта C++14 в нашем коде. Переход на новый стандарт, как мы предполагали, позволил бы нам писать многие вещи элегантней, проще и надежней, упрощал поддержку и сопровождение кода. И в переводе вроде бы нет ничего экстраординарного, если бы не масштабы кодовой базы и специфические особенности нашего кода.
Для тех кто не знает, 1С:Предприятие – это среда для быстрой разработки кросс-платформенных бизнес-приложений и runtime для их выполнения в разных ОС и СУБД. В общих чертах в состав продукта входят:
- Кластер серверов приложений, работает на Windows и Linux
- Клиент, работающий с сервером по http(s) или по собственному бинарному протоколу, работает на Windows, Linux, macOS
- Среда разработки (Конфигуратор), работает на Windows, Linux, macOS
- Инструменты администрирования серверов приложений, работают на Windows, Linux, macOS
- Мобильный клиент, подключающийся к серверу по http(s), работает на мобильных устройствах под управлением Android, iOS, Windows
- Мобильная платформа — фреймворк для создания оффлайновых мобильных приложений с возможностью синхронизации, работающих на мобильных устройствах под управлением Android, iOS, Windows
- Среда разработки 1C:Enterprise Development Tools, написана на Java
Мы стараемся по максимуму писать один код для разных ОС — кодовая база сервера общая на 99%, клиента — примерно на 95%. Технологическая платформа 1С:Предприятия преимущественно написана на C++ и ниже приведены приблизительные характеристики кода:
- 10 миллионов строк С++ кода,
- 14 тысяч файлов,
- 60 тысяч классов,
- полмиллиона методов.
И все это хозяйство надо было перевести на C++14. О том, как мы это делали и с чем столкнулись в процессе, мы сегодня и расскажем.
Antimony — САПР из параллельного мира
2018-10-20 в 12:29, admin, рубрики: antimony, c++, cad, CAD/CAM, python, stl, графы, моделирование, сапр, СофтСреди трёхмерных САПР наиболее известны программы, реализующие два основных подхода к проектированию: прямое моделирование и параметрическое.
Кроме того, существуют процедурные САПР, которые позволяют моделировать посредством программирования. Такой подход снискал себе признание среди любителей программирования и проектирования устройств с открытыми кодом и конструкцией. Например, хорошо известен OpenSCAD, который здесь не раз упоминался.
Предлагаю посмотреть на еще одну необычную САПР под названием Antimony.
Рис. 1. Antimony — САПР из параллельного мира
Читать полностью »