SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Темы лекции: Введение в библиотеку Boost.
Практическое задание: Введение в библиотеку Boost.
Тренер: Игорь Шкулипа, к.т.н.
С++ Библиотеки STL и Qt. Занятие 11
http://www.slideshare.net/IgorShkulipa 2
Что такое библиотека BOOST C++
Библиотека BOOST C++ - это собрание множества независимых
библиотек, созданных независимыми разработчиками и тщательно
проверенными на различных платформах.
Можно считать, что BOOST C++ - это расширение стандартной
библиотеки C++. Многие вещи, предлагавшиеся для нового стандарта
C++ и отвергнутые комитетом по стандартизации, осели в BOOST.
Использование компонентов BOOST C++ в своих разработках экономит
значительные усилия - особенно если планируется портировать проект
на различные платформы. К примеру, в поисковом движке FAIND
используется несколько частей BOOST C++, в частности - библиотека
для работы с именами файлов (путями) filesystem, и библиотека regex
- регулярные выражения.
http://www.slideshare.net/IgorShkulipa 3
Как использовать BOOST в своих проектах
Прежде всего необходимо скачать исходники Boost'а с сайта
www.boost.org. В состав архива входит и документация, и примеры. У
Вас могут возникнуть некоторые затруднения с тем, какая структура
каталогов должна быть после распаковки библиотеки BOOST на диск.
Обратите внимание, что в состав библиотеки Boost не входят
скомпилированные файлы *.lib (или аналогичные). Вы можете либо
скомпилировать их самостоятельно для своей платформы
(соответствующие mak-файлы входят в состав пакета библиотеки
Boost), либо использовать в проектах непосредственно исходные
тексты нужных частей Boost'а.
http://www.slideshare.net/IgorShkulipa 4
Состав библиотеки
Библиотеки Boost охватывают следующее:
• Алгоритмы
• Обход ошибок в компиляторах, не соответствующих стандарту
• Многопоточное программирование
• Контейнеры
• Юнит-тестирование
• Структуры данных
• Функциональные объекты
• Обобщённое программирование
• Графы
• Работа с геометрическими данными
• Ввод-вывод
• Межъязыковая поддержка
• Итераторы
• Математические и числовые алгоритмы
• Работа с памятью
• Синтаксический и лексический разбор
• Метапрограммирование на основе препроцессора
• «Умные указатели»
• Обработка строк и текста
• Метапрограммирование на основе шаблонов
http://www.slideshare.net/IgorShkulipa 5
Работа со строками и текстом
lexical_cast - преобразование любых типов в строки и из строк в любой тип
(подобно sprintf() и atoi() из библиотеки C).
format - позволяет применять привычную для программистов на C форматную
строку из printf() в потоковых операторах с некоторыми новыми возможностями.
Кстати говоря, семейство функций printf(), несмотря на все свои недостатки
(отсутствие проверки типов аргументов на стеке и невозможность расширения
для новых типов) продолжает интенсивно использоваться благодаря очень
компактному форматированию результатов и наглядности исходного кода. В .NET
Framework, несмотря на всю продвинутость, также не смогли отказаться от
парадигмы printf() - схема работы Console::WriteLine очень напоминает printf,
хотя и вводит для безопасности контроль типов аргументов.
regex - мощная библиотека регулярных выражений. Документация. В поисковом
движке FAIND реализована поддержка расширенных регулярных выражений, в
которых можно работать с грамматическими свойствами слов (приводить к
базовым формам, работать с грамматическими кванторами).
tokenizer - разбиение строки на части по разделителям (лексер). Библиотека C++
LEM содержит шаблонный класс BaseLexer<>, который выполняет разбивку
текста на лексемы и их токенизацию, а также целый набор классов (Iridium),
которые реализуют полный препроцессор C.
http://www.slideshare.net/IgorShkulipa 6
Контейнеры
• array - массив постоянного размера (в отличие от std::vector). Среди
контейнерных классов библиотеки LEM есть аналогичные.
• dynamic_bitset - версия std::bitset, которая может динамически
менять размер.
• graph - реализация концепции графов
• multi_array - реализация многомерных массивов.
• property_map
• multi_index
http://www.slideshare.net/IgorShkulipa 7
Функциональные объекты и адаптеры
• bind и mem_fn - адаптеры для функций, объектов и методов и
указателей на них
• compose - адаптеры STL для использования их в функциональном
программировании
• function - функциональные объекты-обертки
• functional - улучшенные адаптеры функциональных объектов
• lambda - безымянная функция (абстракция функционального
программирования)
• ref - библиотека утилит для передачи ссылок в функциональные
объекты
• signals - реализация сигналов и слотов (другое название этой
парадигмы - делегаты).
http://www.slideshare.net/IgorShkulipa 8
Алгоритмы
• graph – представления графов и алгоритмы на графах
• utility - Библиотека вспомогательных шаблонов и функций.
http://www.slideshare.net/IgorShkulipa 9
Многопоточное программирование
• thread
• mutex
• lock
• condition
• xtime - таймеры с высоким разрешением.
http://www.slideshare.net/IgorShkulipa 10
Математические и числовые функции
• math - некоторые реализации теоретической математики в виде шаблонов.
Реализация многих численных методов есть в математическом разделе
библиотеки LEM.
• integer - некоторые операции с целыми числами реализованные в виде
шаблонов, работа с битовыми масками и пр.
• math/common_factor - нахождение наибольшего общего делителя (GCD) и
наименьшего общего множителя (LCM) для двух чисел. Реализации как времени
исполнения, так и компиляции.
• math/octonion - реализация октонионов
• math/quaterion - реализация квартерионов
• math/special_functions - некоторые специальные математические функции
типа гиперболического синуса. Требуются для реализации октонионов и
квартарионов. В математическом разделе библиотеки LEM есть набор численных
методов вычисления многих специальных функций, а также тестовые
программы.
• random - генераторы псевдослучайных чисел и средства для получения
различных распределений вероятности. Много различных генераторов
псевдослучайных чисел и тестовых программ для проверки их качества
реализовано в математическом разделе библиотеки LEM.
• rational - реализация рациональных чисел (дробей).
• uBLAS - основная линейная алгебра для плотных, упакованных и разряженных
матриц. Некоторые численные алгоритмы линейной алгебры реализованы в
математическом разделе библиотеки LEM.
http://www.slideshare.net/IgorShkulipa 11
Структуры данных
• any - безопасный общий контейнер для единичного значения любого
типа.
• compressed_pair - то же, что и std::pair<>, но в случае, если один из
аргументов пустой класс, то оптимизирует пару по размеру.
• tuple - реализация функций, возвращающих несколько значений.
• variant - контейнер для хранения единственного объекта
произвольного типа.
http://www.slideshare.net/IgorShkulipa 12
Работа с памятью
• pool - управление памятью в виде пулов
• smart_ptr - "Умные" указатели.
• utility - определяет базовый класс noncopyable для
некопируемых классов, а также шаблоны next() и prior() для
итераторов, checked_delete() и checked_array_delete() для
удаления указателя и указателя на массив с проверкой типов
на этапе компиляции, шаблон addressof() возвращающий
адрес объекта. Шаблон tie() создан для более удобной
замены std::make_pair(). А также содержит шаблоны для
реализации идиомы Base-from-Member.
http://www.slideshare.net/IgorShkulipa 13
Прочее
• filesystem - работа с файловой системой, путями, именами файлов.
• conversion - помимо lexical_cast<>, содержит polymorphic_cast<> и
polymorphic_downcast<> для безопасного полиморфного
преобразования типов, а так же numeric_cast<> для безопасного
преобразования числовых типов (например из double в short).
• crc - вычисление контрольной суммы.
• date_time - работа с датой, временем и промежутками времени.
• timer - таймеры, отображение progress bar на стандартный вывод.
• utility - описано выше.
http://www.slideshare.net/IgorShkulipa 14
Пример. Thread
#include <boost/thread/thread.hpp>
#include <boost/thread/xtime.hpp>
#include <iostream>
using namespace std;
using namespace boost;
struct thread_alarm {
thread_alarm(int secs) : m_secs(secs) { }
void operator()() {
xtime xt;
xtime_get(&xt, TIME_UTC);
xt.sec += m_secs;
thread::sleep(xt);
cout << "alarm sounded..." << endl;
}
int m_secs;
};
int main(int argc, char* argv[]){
int secs = 5;
cout << "setting alarm for 5 seconds..." << endl;
thread_alarm alarm(secs);
thread thrd(alarm);
thrd.join();
}
http://www.slideshare.net/IgorShkulipa 15
Пример. Tokenizer
string s = "This is, a test";
tokenizer<> tok(s);
for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg)
{
cout << *beg << "n";
}
Результат:
This
is
a
test
http://www.slideshare.net/IgorShkulipa 16
Пример. lexical_cast и format
short n = lexical_cast(*argv[1])
show_error("Error: "+lexical_cast(err))
cout << format("(x,y) = (%+5d,%+5d) n") % -23 % 35
http://www.slideshare.net/IgorShkulipa 17
Пример. Regex
using namespace std;
using namespace boost;
regex expression(
"([_a-zA-Zd-.]+)@([_a-zA-Zd-]+(.[_a-zA-Zd-
]+)+)");
string
str("Мой E-mail: test@test.com. Задавайте любые вопросы.");
cmatch what;
if(regex_search(str, what, expression)) {
string name,domain;
name.assi gn(what[1].first, what[1].second);
domain.assign(what[2].first, what[2].second);
cout << "Имя: " << name;
cout << ", домен: " << domain << endl;
} else
cout << "E-Mail в строке не найден" << endl;
Результат:
Имя: sem, домен: ciam.ru
http://www.slideshare.net/IgorShkulipa 18
Пример. Алгоритм Прима
// named parameter version
template <class Graph, class PredMap, class P, class T, class R>
void prim_minimum_spanning_tree(const Graph& g, PredMap p_map,
const bgl_named_params<P, T, R>& params)
// non-named parameter version
template <class Graph, class DijkstraVisitor,
class PredecessorMap, class DistanceMap,
class WeightMap, class IndexMap>
void prim_minimum_spanning_tree(const Graph& g,
typename graph_traits<Graph>::vertex_descriptor s,
PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
IndexMap index_map, DijkstraVisitor vis)
http://www.slideshare.net/IgorShkulipa 19
Пример. Алгоритм Прима
#include <boost/config.hpp>
#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/prim_minimum_spanning_tree.hpp>
using namespace boost;
int main()
{
std::vector < graph_traits < Graph >::vertex_descriptor >
p(num_vertices(g));
prim_minimum_spanning_tree(g, &p[0]);
for (std::size_t i = 0; i != p.size(); ++i)
if (p[i] != i)
std::cout << "parent[" << i << "] = " << p[i] << std::endl;
else
std::cout << "parent[" << i << "] = no parent" << std::endl;
return EXIT_SUCCESS;
}
http://www.slideshare.net/IgorShkulipa 20
Лабораторная работа №11. Boost
В индивидуальных курсовых проектах, при необходимости,
использовать библиотеку Boost.

Contenu connexe

Tendances

C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.Igor Shkulipa
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.Igor Shkulipa
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Anton Moiseenko
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Anton Moiseenko
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Anton Moiseenko
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.Igor Shkulipa
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в javaUnguryan Vitaliy
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.Unguryan Vitaliy
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.Igor Shkulipa
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.Igor Shkulipa
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroAnton Moiseenko
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6Technopark
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверPlatonov Sergey
 
Скриптовой язык Groovy и его применение в рамках разработки ПО
Скриптовой язык Groovy и его применение в рамках разработки ПОСкриптовой язык Groovy и его применение в рамках разработки ПО
Скриптовой язык Groovy и его применение в рамках разработки ПОFedor Malyshkin
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологииUnguryan Vitaliy
 
Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Anton Moiseenko
 

Tendances (20)

C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
 
Java: вчера, сегодня, завтра
Java: вчера, сегодня, завтраJava: вчера, сегодня, завтра
Java: вчера, сегодня, завтра
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. Intro
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-сервер
 
Скриптовой язык Groovy и его применение в рамках разработки ПО
Скриптовой язык Groovy и его применение в рамках разработки ПОСкриптовой язык Groovy и его применение в рамках разработки ПО
Скриптовой язык Groovy и его применение в рамках разработки ПО
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.
 

En vedette

C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.Igor Shkulipa
 
Production diary 19
Production diary 19Production diary 19
Production diary 19Laila Jaleel
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.Igor Shkulipa
 
αφηγηματολογια
αφηγηματολογιααφηγηματολογια
αφηγηματολογιαMANOLIS MORAITIS
 
Production diary 4
Production diary 4Production diary 4
Production diary 4Laila Jaleel
 
Trabajo completo correcion
Trabajo completo correcionTrabajo completo correcion
Trabajo completo correcionIda Morán
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.Igor Shkulipa
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.Igor Shkulipa
 
Κάτω στο γιαλό...
Κάτω στο γιαλό...Κάτω στο γιαλό...
Κάτω στο γιαλό...syllogos15sch
 
Production diary 8
Production diary 8Production diary 8
Production diary 8Laila Jaleel
 
Production diary 2
Production diary 2Production diary 2
Production diary 2Laila Jaleel
 
Production diary 9
Production diary 9Production diary 9
Production diary 9Laila Jaleel
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.Igor Shkulipa
 
Production diary 9
Production diary 9Production diary 9
Production diary 9Laila Jaleel
 
Investors | How it works
Investors | How it worksInvestors | How it works
Investors | How it worksGREXdotIN
 
16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATE16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATENisha Thinisha
 

En vedette (20)

C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
Production diary 19
Production diary 19Production diary 19
Production diary 19
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.
 
αφηγηματολογια
αφηγηματολογιααφηγηματολογια
αφηγηματολογια
 
Production diary 4
Production diary 4Production diary 4
Production diary 4
 
Trabajo completo correcion
Trabajo completo correcionTrabajo completo correcion
Trabajo completo correcion
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.
 
Κάτω στο γιαλό...
Κάτω στο γιαλό...Κάτω στο γιαλό...
Κάτω στο γιαλό...
 
Production diary 8
Production diary 8Production diary 8
Production diary 8
 
SAEEDcv.
SAEEDcv.SAEEDcv.
SAEEDcv.
 
Production diary 2
Production diary 2Production diary 2
Production diary 2
 
Challenge 11
Challenge 11Challenge 11
Challenge 11
 
Tarea6
Tarea6Tarea6
Tarea6
 
Production diary 9
Production diary 9Production diary 9
Production diary 9
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.
 
Production diary 9
Production diary 9Production diary 9
Production diary 9
 
Investors | How it works
Investors | How it worksInvestors | How it works
Investors | How it works
 
16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATE16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATE
 
BIG BEN
BIG BENBIG BEN
BIG BEN
 

Similaire à C++ STL & Qt. Занятие 11.

C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7Technopark
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
 
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...Tatyanazaxarova
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Denis Vasilyev
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryTatyanazaxarova
 
Сущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCoreСущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCoreTatyanazaxarova
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняLuxoftTraining
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularizationIvan Krylov
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...DevDay
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernelsDenis Efremov
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинIT61
 
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...Alex V. Petrov
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingTatiana Volkova
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 

Similaire à C++ STL & Qt. Занятие 11. (20)

C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
 
Сущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCoreСущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCore
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровня
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий Лапин
 
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
бегун
бегунбегун
бегун
 
Team workflow
Team workflowTeam workflow
Team workflow
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 

Plus de Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03. Igor Shkulipa
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 

Plus de Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 

C++ STL & Qt. Занятие 11.

  • 1. Темы лекции: Введение в библиотеку Boost. Практическое задание: Введение в библиотеку Boost. Тренер: Игорь Шкулипа, к.т.н. С++ Библиотеки STL и Qt. Занятие 11
  • 2. http://www.slideshare.net/IgorShkulipa 2 Что такое библиотека BOOST C++ Библиотека BOOST C++ - это собрание множества независимых библиотек, созданных независимыми разработчиками и тщательно проверенными на различных платформах. Можно считать, что BOOST C++ - это расширение стандартной библиотеки C++. Многие вещи, предлагавшиеся для нового стандарта C++ и отвергнутые комитетом по стандартизации, осели в BOOST. Использование компонентов BOOST C++ в своих разработках экономит значительные усилия - особенно если планируется портировать проект на различные платформы. К примеру, в поисковом движке FAIND используется несколько частей BOOST C++, в частности - библиотека для работы с именами файлов (путями) filesystem, и библиотека regex - регулярные выражения.
  • 3. http://www.slideshare.net/IgorShkulipa 3 Как использовать BOOST в своих проектах Прежде всего необходимо скачать исходники Boost'а с сайта www.boost.org. В состав архива входит и документация, и примеры. У Вас могут возникнуть некоторые затруднения с тем, какая структура каталогов должна быть после распаковки библиотеки BOOST на диск. Обратите внимание, что в состав библиотеки Boost не входят скомпилированные файлы *.lib (или аналогичные). Вы можете либо скомпилировать их самостоятельно для своей платформы (соответствующие mak-файлы входят в состав пакета библиотеки Boost), либо использовать в проектах непосредственно исходные тексты нужных частей Boost'а.
  • 4. http://www.slideshare.net/IgorShkulipa 4 Состав библиотеки Библиотеки Boost охватывают следующее: • Алгоритмы • Обход ошибок в компиляторах, не соответствующих стандарту • Многопоточное программирование • Контейнеры • Юнит-тестирование • Структуры данных • Функциональные объекты • Обобщённое программирование • Графы • Работа с геометрическими данными • Ввод-вывод • Межъязыковая поддержка • Итераторы • Математические и числовые алгоритмы • Работа с памятью • Синтаксический и лексический разбор • Метапрограммирование на основе препроцессора • «Умные указатели» • Обработка строк и текста • Метапрограммирование на основе шаблонов
  • 5. http://www.slideshare.net/IgorShkulipa 5 Работа со строками и текстом lexical_cast - преобразование любых типов в строки и из строк в любой тип (подобно sprintf() и atoi() из библиотеки C). format - позволяет применять привычную для программистов на C форматную строку из printf() в потоковых операторах с некоторыми новыми возможностями. Кстати говоря, семейство функций printf(), несмотря на все свои недостатки (отсутствие проверки типов аргументов на стеке и невозможность расширения для новых типов) продолжает интенсивно использоваться благодаря очень компактному форматированию результатов и наглядности исходного кода. В .NET Framework, несмотря на всю продвинутость, также не смогли отказаться от парадигмы printf() - схема работы Console::WriteLine очень напоминает printf, хотя и вводит для безопасности контроль типов аргументов. regex - мощная библиотека регулярных выражений. Документация. В поисковом движке FAIND реализована поддержка расширенных регулярных выражений, в которых можно работать с грамматическими свойствами слов (приводить к базовым формам, работать с грамматическими кванторами). tokenizer - разбиение строки на части по разделителям (лексер). Библиотека C++ LEM содержит шаблонный класс BaseLexer<>, который выполняет разбивку текста на лексемы и их токенизацию, а также целый набор классов (Iridium), которые реализуют полный препроцессор C.
  • 6. http://www.slideshare.net/IgorShkulipa 6 Контейнеры • array - массив постоянного размера (в отличие от std::vector). Среди контейнерных классов библиотеки LEM есть аналогичные. • dynamic_bitset - версия std::bitset, которая может динамически менять размер. • graph - реализация концепции графов • multi_array - реализация многомерных массивов. • property_map • multi_index
  • 7. http://www.slideshare.net/IgorShkulipa 7 Функциональные объекты и адаптеры • bind и mem_fn - адаптеры для функций, объектов и методов и указателей на них • compose - адаптеры STL для использования их в функциональном программировании • function - функциональные объекты-обертки • functional - улучшенные адаптеры функциональных объектов • lambda - безымянная функция (абстракция функционального программирования) • ref - библиотека утилит для передачи ссылок в функциональные объекты • signals - реализация сигналов и слотов (другое название этой парадигмы - делегаты).
  • 8. http://www.slideshare.net/IgorShkulipa 8 Алгоритмы • graph – представления графов и алгоритмы на графах • utility - Библиотека вспомогательных шаблонов и функций.
  • 9. http://www.slideshare.net/IgorShkulipa 9 Многопоточное программирование • thread • mutex • lock • condition • xtime - таймеры с высоким разрешением.
  • 10. http://www.slideshare.net/IgorShkulipa 10 Математические и числовые функции • math - некоторые реализации теоретической математики в виде шаблонов. Реализация многих численных методов есть в математическом разделе библиотеки LEM. • integer - некоторые операции с целыми числами реализованные в виде шаблонов, работа с битовыми масками и пр. • math/common_factor - нахождение наибольшего общего делителя (GCD) и наименьшего общего множителя (LCM) для двух чисел. Реализации как времени исполнения, так и компиляции. • math/octonion - реализация октонионов • math/quaterion - реализация квартерионов • math/special_functions - некоторые специальные математические функции типа гиперболического синуса. Требуются для реализации октонионов и квартарионов. В математическом разделе библиотеки LEM есть набор численных методов вычисления многих специальных функций, а также тестовые программы. • random - генераторы псевдослучайных чисел и средства для получения различных распределений вероятности. Много различных генераторов псевдослучайных чисел и тестовых программ для проверки их качества реализовано в математическом разделе библиотеки LEM. • rational - реализация рациональных чисел (дробей). • uBLAS - основная линейная алгебра для плотных, упакованных и разряженных матриц. Некоторые численные алгоритмы линейной алгебры реализованы в математическом разделе библиотеки LEM.
  • 11. http://www.slideshare.net/IgorShkulipa 11 Структуры данных • any - безопасный общий контейнер для единичного значения любого типа. • compressed_pair - то же, что и std::pair<>, но в случае, если один из аргументов пустой класс, то оптимизирует пару по размеру. • tuple - реализация функций, возвращающих несколько значений. • variant - контейнер для хранения единственного объекта произвольного типа.
  • 12. http://www.slideshare.net/IgorShkulipa 12 Работа с памятью • pool - управление памятью в виде пулов • smart_ptr - "Умные" указатели. • utility - определяет базовый класс noncopyable для некопируемых классов, а также шаблоны next() и prior() для итераторов, checked_delete() и checked_array_delete() для удаления указателя и указателя на массив с проверкой типов на этапе компиляции, шаблон addressof() возвращающий адрес объекта. Шаблон tie() создан для более удобной замены std::make_pair(). А также содержит шаблоны для реализации идиомы Base-from-Member.
  • 13. http://www.slideshare.net/IgorShkulipa 13 Прочее • filesystem - работа с файловой системой, путями, именами файлов. • conversion - помимо lexical_cast<>, содержит polymorphic_cast<> и polymorphic_downcast<> для безопасного полиморфного преобразования типов, а так же numeric_cast<> для безопасного преобразования числовых типов (например из double в short). • crc - вычисление контрольной суммы. • date_time - работа с датой, временем и промежутками времени. • timer - таймеры, отображение progress bar на стандартный вывод. • utility - описано выше.
  • 14. http://www.slideshare.net/IgorShkulipa 14 Пример. Thread #include <boost/thread/thread.hpp> #include <boost/thread/xtime.hpp> #include <iostream> using namespace std; using namespace boost; struct thread_alarm { thread_alarm(int secs) : m_secs(secs) { } void operator()() { xtime xt; xtime_get(&xt, TIME_UTC); xt.sec += m_secs; thread::sleep(xt); cout << "alarm sounded..." << endl; } int m_secs; }; int main(int argc, char* argv[]){ int secs = 5; cout << "setting alarm for 5 seconds..." << endl; thread_alarm alarm(secs); thread thrd(alarm); thrd.join(); }
  • 15. http://www.slideshare.net/IgorShkulipa 15 Пример. Tokenizer string s = "This is, a test"; tokenizer<> tok(s); for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg) { cout << *beg << "n"; } Результат: This is a test
  • 16. http://www.slideshare.net/IgorShkulipa 16 Пример. lexical_cast и format short n = lexical_cast(*argv[1]) show_error("Error: "+lexical_cast(err)) cout << format("(x,y) = (%+5d,%+5d) n") % -23 % 35
  • 17. http://www.slideshare.net/IgorShkulipa 17 Пример. Regex using namespace std; using namespace boost; regex expression( "([_a-zA-Zd-.]+)@([_a-zA-Zd-]+(.[_a-zA-Zd- ]+)+)"); string str("Мой E-mail: test@test.com. Задавайте любые вопросы."); cmatch what; if(regex_search(str, what, expression)) { string name,domain; name.assi gn(what[1].first, what[1].second); domain.assign(what[2].first, what[2].second); cout << "Имя: " << name; cout << ", домен: " << domain << endl; } else cout << "E-Mail в строке не найден" << endl; Результат: Имя: sem, домен: ciam.ru
  • 18. http://www.slideshare.net/IgorShkulipa 18 Пример. Алгоритм Прима // named parameter version template <class Graph, class PredMap, class P, class T, class R> void prim_minimum_spanning_tree(const Graph& g, PredMap p_map, const bgl_named_params<P, T, R>& params) // non-named parameter version template <class Graph, class DijkstraVisitor, class PredecessorMap, class DistanceMap, class WeightMap, class IndexMap> void prim_minimum_spanning_tree(const Graph& g, typename graph_traits<Graph>::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, WeightMap weight, IndexMap index_map, DijkstraVisitor vis)
  • 19. http://www.slideshare.net/IgorShkulipa 19 Пример. Алгоритм Прима #include <boost/config.hpp> #include <iostream> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/prim_minimum_spanning_tree.hpp> using namespace boost; int main() { std::vector < graph_traits < Graph >::vertex_descriptor > p(num_vertices(g)); prim_minimum_spanning_tree(g, &p[0]); for (std::size_t i = 0; i != p.size(); ++i) if (p[i] != i) std::cout << "parent[" << i << "] = " << p[i] << std::endl; else std::cout << "parent[" << i << "] = no parent" << std::endl; return EXIT_SUCCESS; }
  • 20. http://www.slideshare.net/IgorShkulipa 20 Лабораторная работа №11. Boost В индивидуальных курсовых проектах, при необходимости, использовать библиотеку Boost.