STL

From Wikipedia, the free encyclopedia

Remove ads

STL (съкр. от Standard Template Library – Стандартна библиотека с шаблони)
е софтуерна библиотека, отчасти включена в стандартната библиотека на езика С++.
STL предоставя удобен начин за работа с контейнери, итератори, алгоритми и функтори. STL съдържа готови класове за работа с основни структури от данни
(стек, опашка, дек, списък, граф и др.)

Remove ads

Съдържание

Контейнери:

Повече информация Контейнер, Описание ...

Итератори:

Итераторите са подобни на указателите.

Има пет типа итератори:

  • Входни (input) – могат да бъдат използвани само за четене на последователност от стойности.
  • Изходни (output) – могат да бъдат използвани само за писане на последователност от стойности.
  • Еднопосочни (forward) – могат да бъдат използвани за четене и писане; движението е само напред.
  • Двупосочни (bidirectional) – могат да бъдат използвани за четене и писане; разрешават движение и напред, и назад.
  • Итератори със свободен достъп (random access) – разрешават достъп до произволен елемент.

Двупосочните итератори имат същите възможности като итераторите със свободен достъп. Например преместването десет стъпки напред може да бъде представено като десет премествания с една стъпка напред. В общия случай обаче итераторите със свободен достъп работят по-бързо от двупосочните. Например един vector може да има итератор със свободен достъп, но един списък (list) може да има само двупосочен итератор.

Итераторите са главното средство на библиотеката STL да бъде всеобхватна. Например един алгоритъм за обръщане на редица може да бъде програмиран с помощта на двупосочни итератори и след това да бъде използван за контейнерите list, vector и deque. Създаден от потребителя контейнер трябва само да предостави итератор (един от петте вида) и всички алгоритми в STL ще могат да бъдат използвани за този контейнер.

Тази универсалност си има своята цена. Например търсенето в асоциативен контейнер, като map или set, може да бъде много по-бавно, ако се използват итератори, отколкото ако се викат методите на самия контейнер. Методите на контейнера познават вътрешната структура на контейнера и могат да се възползват от това. Тази информация е недостъпна за алгоритмите, използващи итератори.

Алгоритми:

Функтори:

Remove ads

Примери

Сортиране на елементите на вектор:

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main() {
  vector<int>v(5);
  for(int i=0;i<v.size();i++)
    v.push_back(i+1);

  cout<<"Големината на вектора е: "<<v.size()<<endl;
  cout<<"Елементите на вектора в обратен ред: ";

  while(!v.empty()) {
    cout<<v.back()<<" ";
    v.pop_back();
  }

  v.push_back(3);
  v.push_back(2);
  v.push_back(7);
  v.push_back(5);
  v.push_back(9);

  sort(v.begin(),v.end());
  cout<<"Елементите в нарастващ ред:"<<endl;

  while(!v.empty()) {
    cout<<v.front()<<" ";
    v.erase(v.begin());
  }

  system("pause");
  return 0;
}
Remove ads

Още за STL

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads