C++旧版课程库
C++ CSP-J2 基础进阶查看课程总览

CSP-J 031 STL模版

一、什么是STL?

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。

STL中包含六大组件:

  • 容器(Container),是一种数据结构,如list,vector,和deques ,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;
  • 迭代器(Iterator),提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象;
  • 算法(Algorithm),是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象,函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用;
  • 仿函数(Functor)
  • 适配器(Adaptor)
  • 分配器(allocator)

对于我们学习算法而言,我们可以优先了解容器,其余的可以在之后的学习过程中慢慢学习。

二、容器

1. vector

Vector 是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

下面我们来通过一些vector的用法示例来了解其功能:

1.1 vector的创建和添加元素

注意:使用vector需要通过 #include<vector>进行库引入

vector<int> v; // int表示该容器中存放的数据的数据类型为int,v则为容器名
for(int i = 0; i < 100; ++i) v.push_back(i); // 通过 push_back()方法将一个元素加入vector,每次从尾部加入
1.2 访问元素和赋值
vector<int> v; 
for(int i = 0; i < 100; ++i) v.push_back(i);
v[15] = 4; // vector的赋值方式与数组一致
v[0] = 15; // vector的下标也是从0开始
v[100] = 30; // 报错,越界访问
1.3 排序和翻转
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
 
int main()
{
    vector<int> v;
 
    v.push_back(1);
    v.push_back(3);
    v.push_back(0);
 
    sort(v.begin(),v.end()); // 通过v.begin()和v.end()获取容器的起始和结束位置,并通过std::sort()进行从小到大的排序
 
    for(int i=0;i<v.size();i++) cout<<v[i]<<" "; 
    cout << endl;
 
    reverse(v.begin(),v.end());//从大到小  // 使用reverse对容器中的元素顺序进行翻转
    for(int i=0;i<v.size();i++) cout<<v[i]<<" "; 

    return 0;
}