В стандарте языка С++ предусматривается наличие в среде программирования стандартной библиотеки шаблонов (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; // переход по тому же уровню
}
}
Ввод текста из файла: уровень текста в файле можно выделить строками специального вида (например, скобками '{' и '}').
Общая схема алгоритма:
повторить:
ввод строки
ЕСЛИ '}' ТО Завершить
ЕСЛИ '{' ТО Выполнить рекурсивно Ввод_текста
Добавить строку на том же уровне