В стандарте языка С++ предусматривается наличие в среде программирования стандартной библиотеки шаблонов (Standard Template Library, STL).
Основные понятия библиотеки STL.
Библиотека включает в свой состав большое количество контейнеров, представляющих собой структуры данных, в которых могут храниться объекты.
В числе имеющихся контейнеров:
vector<T>
- вектор переменного размераlist<T>
- двусвязный списокqueue<T>
- очередьstack<T>
- стекdeque<T>
- декpriority_queue<T>
- приоритетная очередьset<T>
- множествоmultiset<T>
- множество с повторением элементовmap<key,val>
- ассоциативный массив (таблица)multimap<key,val>
- ассоциативный массив с повторением ключейДля быстрого и эффективного построения вычислительных процедур, библиотека обеспечивает итераторы для всех видов контейнеров, которые представляют унифицированный механизм последовательного доступа к элементам контейнеров.
Общая схема:
<класс-контейнер>::iterator Iter;
- объявление итератораIter = <объект-контейнер>.begin();
- установка на первый элементIter != <объект-контейнер>.end();
- проверка на завершение++Iter
– переход к следующему элементуВ зависимости от типа контейнера, итератор может обеспечивать прямой доступ, быть одно- или дву- направленным, предназначенным только для чтения или записи и др. Библиотека содержит для контейнеров большое количество реализованных обобщенных алгоритмов.
В числе таких алгоритмов:
for_each()
- вызвать функцию для каждого элемента,find()
- найти первое вхождение элементаfind_if()
- найти первое соответствие условиюcount()
- подсчитать число вхождений элементаcount_if()
- подсчитать число соответствий условиюreplace()
- заменить элемент новым значениемcopy()
- скопировать элементыunique_copy()
- скопировать только различные элементыsort()
- отсортировать элементыmerge()
- объединить отсортированные последовательности и дрПечать текста: схема обхода
while (1)
{
if ( pLink != NULL )
{
cout << pLink->Str; // обработка звена
St.push(pLink); // запись в стек
pLink = pLink->pDown; // переход на подуровень
}
else if ( St.empty() )
break;
else
{
pLink = St.top();
St.pop(); // выборка из стека
pLink = pLink->pNext; // переход по тому же уровню
}
}
Ввод текста из файла: уровень текста в файле можно выделить строками специального вида (например, скобками '{' и '}').
Общая схема алгоритма:
повторить:
ввод строки
ЕСЛИ '}' ТО Завершить
ЕСЛИ '{' ТО Выполнить рекурсивно Ввод_текста
Добавить строку на том же уровне