English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Tutorial STL

STL é a abreviação de “Standard Template Library”, traduzida para chinês como “Biblioteca de Template Padrão”. STL é uma biblioteca C++ Parte da biblioteca padrão, não é necessário instalar separadamente.

Nos capítulos anteriores, já estudamos C++ O conceito de template. C++ STL (Biblioteca de Template Padrão) é um conjunto de bibliotecas C++ Classe de modelo, que oferece classes e funções genéricas, que podem implementar várias algoritmos e estruturas de dados populares e comuns, como vetores, listas encadeadas, filas e pilhas.

C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环队列,set 的底层为红黑树,hash_set 的底层为哈希表。

C++ 标准模板库的核心包括以下三个组件:

组件描述
容器(Containers)容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。
算法(Algorithms)算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
迭代器(iterators)迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。

这三个组件都带有丰富的预定义函数,帮助我们通过简单的方式处理复杂的任务。

下面的程序演示了向量容器(一个 C++ 标准的模板),它与数组十分相似,唯一不同的是,向量在需要扩展大小的时候,会自动处理它自己的存储需求:

#include <iostream>
#include <vector>
using namespace std;
 
int main()
{
   // 创建一个向量存储 int
   vector<int> vec; 
   int i;
 
   // 显示 vec 的原始大小
   cout << "vec 的原始大小 = " << vec.size() << endl;
 
   // 添加 6 个值到向量中
   for(i = 0; i < 6; i++}
      vec.push_back(i+1;
   }
 
   // 显示 vec 扩展后的大小
   cout << "vec 扩展后的大小 = " << vec.size() << endl;
 
   // 访问向量中的 5 个值
   for(i = 0; i < 5; i++}
      cout << " vec [" << i << "] 的值= " << vec[i] << endl;
   }
 
   // 使用迭代器 iterator 访问值
   vector<int>::iterator v = vec.begin();
   while( v != vec.end()) {
      cout << "v 的值 = " << *v << endl;
      v++;
   }
 
   return 0;
}

Quando o código acima for compilado e executado, ele produzirá o seguinte resultado:

O tamanho original do vec é = 0
O tamanho expandido do vec é = 6
 vec [0] o valor é = 1
 vec [1O valor de ] é = 2
 vec [2O valor de ] é = 3
 vec [3O valor de ] é = 4
 vec [4O valor de ] é = 5
 vec [5O valor de ] é = 6
O valor de v é = 1
O valor de v é = 2
O valor de v é = 3
O valor de v é = 4
O valor de v é = 5
O valor de v é = 6

Sobre os vários tipos de funções usados no exemplo acima, há alguns pontos a considerar:

  • O membro da função push_back( ) insere um valor no final do vetor, se necessário, expande o tamanho do vetor.

  • A função size( ) mostra o tamanho do vetor.

  • A função begin( ) retorna um iterador apontando para o início do vetor.

  • A função end( ) retorna um iterador apontando para o final do vetor.