Перейти к содержимому

Что такое stl

  • автор:

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

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

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

Сейчас существует немало ее реализаций, каждая из которых, хоть и создана в рамках стандарта, обладает собственными расширениями. У подобного подхода есть один недостаток: не всегда код будет работать одинаково с разными компиляторами. Поэтому настоятельно рекомендуем вам максимально придерживаться традиционных приемов, как бы хорошо вы не разбирались в конкретной реализации библиотеки.

Первое знакомство

Для начала рассмотрим самые популярные коллекции из библиотеки. Каждая из них имеет собственный набор шаблонных параметров, чтобы быть максимально удобной для как можно большего спектра решаемых задач.

Коллекции

Для использования коллекции в своем коде используйте следующую директиву:

#include ,
где T — название коллекции

Итак, наиболее часто используются:

  • vector — коллекция элементов, сохраненных в массиве, изменяющегося по мере необходимости размера (обычно, увеличивающегося);
  • list — коллекция, хранящая элементы в виде двунаправленного связанного списка;
  • map — коллекция, сохраняющая пары вида , т.е. каждый элемент — это пара вида , при этом однозначная (каждому ключу соответствует единственное значение), где ключ — некоторая характеризующая значение величина, для которой применима операция сравнения; пары хранятся в отсортированном виде, что позволяет осуществлять быстрый поиск по ключу, но за это, естественно, придется заплатить: придется так реализовывать вставку, чтобы условие отсортированности не нарушилось;
  • set — это отсортированная коллекция одних только ключей, т.е. значений, для которых применима операция сравнения, при этом уникальных — каждый ключ может встретиться во множестве (от англ. set — множество) только один раз;
  • multimap — map , в котором отсутствует условие уникальности ключа, т.е. если вы произведете поиск по ключу, то получите не единственное значение, а набор элементов с одинаковым значением ключа; для использования в коде используется #include ;
  • multiset — коллекция с тем же отличием от set’а, что и multimap от map’а, т.е. с отсутствием условия уникальности ключа; для подключения: #include .

Строки

Любая серьезная библиотека имеет свои классы для представления строк. В STL строки представляются как в формате ASCII, так и Unicode:
string — коллекция однобайтных символов в формате ASCII;
wstring — коллекция двухбайтных символов в формате Unicode; включается командой #include .

Строковые потоки

strstream — используются для организации STL-строкового сохранения простых типов данных.
Разбор примеров начнем именно с этого класса.

//stl.cpp: Defines the entry point for the console application #include "stdafx.h" #include #include #include using namespace std; int _tmain (int argc, _TCHAR* argv []) < strstream xstr; for (int i = 0; i < 10; i++) < xstr cout

Строковый поток — это буфер с нуль-терминатором в конце, поэтому при первой распечатке в конце строки оказывается мусор, т.е. получить реальный конец можно не посредством нуль-терминатора, а получив счетчик: pcount() . Затем “реальная часть” потока копируется в новую строку, и мы получаем распечатку уже без мусора.

Итераторы

Очень важное понятие в реализации динамических структур данных — итератор. Неформально итератор можно определить как абстракцию, которая ведет себя как указатель, возможно, с какими-то ограничениями. Строго говоря, итератор — более общее понятие, и является объектной оберткой для указателя, поэтому указатель является итератором. Примерно его устройство может выглядеть так:

class Iterator < T* pointer; public: T* GetPointer () < return this - >pointer; > void SetPointer (T* pointer) < this - >pointer = pointer; > >; 

Вот несколько формализованных определений итератора:

  • Итераторы обеспечивают доступ к элементам коллекции
  • Для каждого конкретного класса STL итераторы определяются отдельно внутри класса этой коллекции.

Существуют три типа итераторов:

  • (forward) iterator — для обхода коллекции от меньшего индекса к большему;
  • reverse iterator — для обхода коллекции от большего индекс к меньшему;
  • random access iterator — для обхода коллекции в любом направлении.

Вот пример использования итераторов для удаления половин элементов коллекции:

#include "stdafx.h" #include #include #include using namespace std; void printInt (int number); int _tmain (int argc, _TCHAR* argv []) < vectormyVec; vector::iterator first, last; for (long i=0; i first = myVec.begin (); last = myVec.begin () + 5; if (last >= myVec.end ()) < return - 1; >myVec.erase (first, last); for_each (myVec.begin (), myVec.end (), printInt); return 0; > void printInt (int number)

Важно понимать, что при получении итератора на какой-то элемент коллекции и последующем изменении коллекции итератор может стать непригоден для использования.

Итерация вперед и аналогично назад происходит так:
for (iterator element = begin (); element

При использовании random access iterator, например, так:
for (iterator element = begin (); element

Методы коллекций

Основными методами, присутствующими почти во всех коллекциях являются следующие:

  • empty — определяет, пуста ли коллекция;
  • size — возвращает размер коллекции;
  • begin — возвращает прямой итератор, указывающий на начало коллекции;
  • end — возвращает прямой итератор, указывающий на конец коллекции, т.е. на несуществующий элемент, идущий после последнего;
  • rbegin — возвращает обратный итератор на начало коллекции;
  • rend — возвращает обратный итератор на конец коллекции;
  • clear — очищает коллекцию, т.е. удаляет все ее элементы;
  • erase — удаляет определенные элементы из коллекции;
  • capacity — возвращает вместимость коллекции, т.е. количество элементов, которое может вместить эта коллекция (фактически, сколько памяти под коллекцию выделено);

Вместимость коллекции, как было сказано в начале, меняется по мере надобности, т.е. если вся выделенная под коллекцию память уже заполнена, то при добавлении нового элемента вместимость коллекции будет увеличена, а все значения, бывшие в ней до увеличения, будут скопированы в новую область памяти — это довольно “дорогая” операция. Убедиться в том, что размер и вместимость — разные вещи, можно на следующем примере:

vector vec; cout cout 

Vector

Самая часто используемая коллекция — это вектор. Очень удобно, что у этой коллекции есть такой же оператор operator [] , что и у обычного массива. Такой же оператор есть и у коллекций map , deque , string и wstring .

Важно понимать, что вместимость vector'а изменяется динамически. Обычно для увеличения размера используется мультипликативный подход: выделенная под vector память увеличивается при необходимости в константное число раз, т.е. если добавление нового элемента приведет к тому, что размер массива превысит вместимость, то операционной системой для программы будет выделен новый участок памяти, например, в два раза больший, в который будут скопированы все значения из старого участка памяти и к которому будет дописано новое значение.

Алгоритмы

Разработчики библиотеки STL ставили перед собой гораздо более серьезную задачу, чем создание библиотеки с набором шаблонных структур данных. STL содержит огромный набор оптимальных реализаций популярных алгоритмов, позволяющих работать с STL-коллекциями. Все реализованные функции можно поделить на три группы:

  • Методы перебора всех элементов коллекции и их обработки: count , count_if , find , find_if , adjacent_find , for_each , mismatch , equal , search copy , copy_backward , swap , iter_swap , swap_ranges , fill , fill_n , generate , generate_n , replace , replace_if , transform , remove , remove_if , remove_copy , remove_copy_if , unique , unique_copy , reverse , reverse_copy , rotate , rotate_copy , random_shuffle , partition , stable_partition
  • Методы сортировки коллекции: sort , stable_sort , partial_sort , partial_sort_copy , nth_element , binary_search , lower_bound , upper_bound , equal_range , merge , inplace_merge , includes , set_union , set_intersection , set_difference , set_symmetric_difference , make_heap , push_heap , pop_heap , sort_heap , min , max , min_element , max_element , lexographical_compare , next_permutation , prev_permutation
  • Методы выполнения определенных арифметических операций над членами коллекций: Accumulate , inner_product , partial_sum , adjacent_difference

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

Предикаты

Для многих алгоритмов STL можно задать условие, посредством которого алгоритм определит, что ему делать с тем или иным членом коллекции. Предикат — это функция, которая принимает несколько параметров и возвращает логическое значение (истина/ложь). Существует и набор стандартных предикатов.

Потокобезопасность

Важно понимать, что STL — не потокобезопасная библиотека. Но решить эту проблему очень просто: если два потока используют одну коллекцию, просто реализуйте критическую секцию и Mutex .

Заключение

STL — кросс-платформенная библиотека. Конечно, не существует абсолютной гарантии, что эта библиотека есть в любой версии компилятора. Например, она редко реализуется на мобильных устройствах, потому что большая часть реализованных структур данных делает выбор в пользу быстродействия, совершенно не экономя память, а ведь именно память является самым ценным ресурсом на мобильных платформах, в то время как на PC ее сейчас в избытке. Поэтому, нередко вам придется создавать свои реализации STL, например, для переноса вашего приложения на мобильную платформу.

Следите за новыми постами по любимым темам

Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.

STL формат

У этого термина существуют и другие значения, см. STL.

STL — формат файла, используемый для хранения трехмерных моделей объектов для использования в технологиях быстрого прототипирования, обычно, методом стереолитографии (от англ. stereolithography ). Информация об объекте представляет собой список треугольных граней, которые описывают его поверхность. STL-файл может быть текстовым (ASCII) или двоичным.

Wikimedia Foundation . 2010 .

Смотреть что такое "STL формат" в других словарях:

  • STL (формат файла) — STL Расширение .stl MIME application/sla [1] Разработан 3D Systems Опубликован 1987[2] Тип формата 3д модели Стандар … Википедия
  • STL — STL: Стандартная библиотека шаблонов (Standard Template Library, STL) стандартная библиотека шаблонов в языке программирования C++. STL формат файла с данными о 3D модели. STL обозначение технологического процесса «лазерная стереолитография». STL … Википедия
  • Графические форматы — Графический формат это способ записи графической информации. Графические форматы файлов предназначены для хранения изображений, таких как фотографии и рисунки. Графические форматы делятся на векторные и растровые. Содержание 1 Растровые… … Википедия
  • DRAFTSIGHT — Тип САПР Разработчик Dassault Systèmes Операционная система Windows, Mac OS X, Linux Аппаратная платформа PC, Mac, Linux Последняя версия V1R2.0 (05.2012) … Википедия
  • SALOME — Тип Pre and Post Processing for numerical simulation. Разработчик OPEN CASCADE … Википедия
  • Строковый тип — В программировании, строковый тип (англ. string «нить, вереница») тип данных, значениями которого является произвольная последовательность (строка) символов алфавита. Каждая переменная такого типа (строковая переменная) может быть… … Википедия
  • Список файловых систем — Это список файловых систем (ФС) и сетевых протоколов, эмулирующих работу файловой системы, с небольшим описанием. Чтобы узнать более, вы можете пройти по соответствующей ссылке. Некоторые старые системы поддерживали только одну файловую систему,… … Википедия
  • ГОСТ Р 34.11-94 — Криптографическая хеш функция Название ГОСТ Р 34.11 94 Создан 1994 Опубликован 23 мая 1994 Размер хеша 256 бит Число раундов 1 Тип хеш функция ГОСТ Р 34.11 94 российский … Википедия
  • Полигональная сетка — Пример полигональной сетки, изображающей дельфина. Полигональная сетка (англ. polygon mesh) или неструктурированная сетка это совок … Википедия
  • Распределенная ФС — Это список файловых систем и сетевых протоколов, эмулирующих работу файловой системы, с небольшим описанием. Чтобы узнать более, вы можете пройти по соответствующей ссылке. Некоторые старые системы поддерживали только одну файловую систему,… … Википедия

Что такое stl

Список значений слова или словосочетания со ссылками на соответствующие статьи.
Если вы попали сюда из другой статьи Википедии, пожалуйста, вернитесь и уточните ссылку так, чтобы она указывала на статью.
  • Многозначные термины

Wikimedia Foundation . 2010 .

  • Андрияка, Сергей Николаевич
  • Лицом к лицу (фильм)

Смотреть что такое "STL" в других словарях:

  • STL — steht als Name für: STL beziehungsweise Stella Mwangi (* 1986), kenianisch norwegische Hip Hopperin und Sängerin STL steht allgemein für: Sacrae Theologiae Licentiatus, ein Abschluss in katholischer Theologie Schiffstechnischer Leitstand Sport… … Deutsch Wikipedia
  • STL — may refer to:;In communications: *Standard telegraph level *Studio/transmitter link;In the economics: *Software Technologies Laboratory, a private company in Blacksburg, Virginia; originally part of Virginia Tech *Standard Telecommunication… … Wikipedia
  • stl — stl; STL; … English syllables
  • STL — (Standard Template Library) type of library for compiling C++ programs that enables the user to employ generic container classes and generic algorithms (Computers) … English contemporary dictionary
  • STL — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Sigles d’une seule lettre Sigles de deux lettres > Sigles de trois lettres Sigles de quatre lettres … Wikipédia en Français
  • STL (формат файла) — STL Расширение .stl MIME application/sla [1] Разработан 3D Systems Опубликован 1987[2] Тип формата 3д модели Стандар … Википедия
  • STL формат — У этого термина существуют и другие значения, см. STL. STL формат файла, используемый для хранения трехмерных моделей объектов для использования в технологиях быстрого прототипирования, обычно, методом стереолитографии (от англ.… … Википедия
  • STL (file format) — Infobox file format name = STL icon = caption = extension = .stl mime = type code = uniform type = magic = owner = 3D Systems released = latest release version = latest release date = genre = Stereolithography container for = contained by =… … Wikipedia
  • STL-Format — Bei der STL Schnittstelle (SurfaceTesselationLanguage (Beschreibung der Oberfläche durch Dreiecke) oder auch StandardTriangulationLanguage, Herkunft unsicher, auch StandardTesselationLanguage) handelt es sich um eine (Quasi )Standardschnittstelle … Deutsch Wikipedia
  • STL-Schnittstelle — Bei der STL Schnittstelle (SurfaceTesselationLanguage (Beschreibung der Oberfläche durch Dreiecke) oder auch StandardTriangulationLanguage, Herkunft unsicher, auch StandardTesselationLanguage) handelt es sich um eine (Quasi )Standardschnittstelle … Deutsch Wikipedia

Файл формата STL — что это?

Файл STL относится к категории автоматизированного проектирования, в среде файлов CAD расшифровывается как Stereolithography File. Такой формат файла применяется в сфере стереолитографии, которая отвечает за обработку трехмерных моделей и частей. В область стереолитографии входят 3d-модели изображения макетов, используемых в целях формирования управляющих моделей для создания большого количества копий.

Формат STL применяют в процессе файлового обмена, ведь подобные файлы данных относятся к категории файлов CAD, соответственно сам формат файла STL будет возможным запускать при помощи разнообразных специализированных утилит и программных комплексов, относящихся к среде автоматизированного проектирования.

Учитывая, что работа с расширением .stl предполагает определенное программное обеспечение, рассмотрим программу IMSI TurboCAD, способную быстро и комфортно открыть файл STL. Утилита IMSI TurboCAD Deluxe обеспечивает реализацию 2D и объёмных проектов, имеет в своём арсенале полезные интрументы, способные редактировать CAD -файлы, в том числе и STL формат. Стоит отметить, что STL файлы относятся и к среде 3D-моделирования.

Открывать и редактировать STL формат файла, при помощи специальных утилит, можно в пределах системы Windows, а также Mac OS и Linux. Среди остальных популярных программ, которые способны открывать содержимое файла STL и прочих CAD-файлов, можно выделить GOM Inspect либо Geomagic Explorer, а также Dassault Systemes CATIA. Подобные утилиты поддерживают расширение файла категории CAD, они способны открыть файл .stl и редактировать .stl расширение.

Программы для работы с STL в Windows

IMSI TurboCAD
GOM Inspect
ideaMK STL Viewer
Geomagic Explorer

Mac

IMSI TurboCAD Deluxe v8
GLC_Player

Linux

Parametric Technology Creo
Dassault Systemes CATIA
GLC_Player

Решение проблем с файлами STL

Наиболее распространенная проблема - файл не открывается. Мы подготовили набор программ, с помощью которых вы гарантированно сможете открыть нужный файл в вашей операционной системе.

Иногда просто открыть файл - недостаточно. Если вам нужно его отредактировать - скачайте одну из бесплатных программ:

Если вам необходимо создать файл "с нуля" воспользуйтесь одной из программ с нужным функционалом. Вы найдете несколько вариантов программ для различных платформ по ссылке ниже.

  • Видео форматы
  • Аудио форматы
  • Электронные книги
  • Текстовые форматы
  • Дисковые образы
  • Табличные данные
  • Растровые изображения
  • Векторные изображения
  • Резервное копирование
  • Raw
  • Сжатые файлы
  • Файлы данных
  • Базы
  • 3D Изображения
  • CAD файлы
  • Файлы разработчиков
  • Зашифрованные файлы
  • Исполняемые форматы
  • Шрифты
  • Файлы игр
  • GIS, карты
  • Другие расширения
  • Форматы макетов
  • Форматы плагинов
  • Файлы настроек
  • Системные файлы
  • Веб форматы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *