STL开篇

STL开篇

STL 实际上,是一套封装好的C++模板类。提供通用的模板类和函数,用来高性能的实现常用的算法和数据结构,比如:向量vector、链表、队列、栈。

STL 做到了数据结构和算法的分离,比如:vector的底层是顺序表(数组),list的底层为双向链表,deque的底层是循环队列,set的底层是红黑树,hash_set的底层是哈希表。

C++ STL 的核心包括三个组件:

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

一个简单的vector示例

vecotr和数组非常相似,唯一不同的是,vector在需要扩展大小的时候,会自动处理它的存储需求!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <vector>
using namespace std;

int main()
{
vector<int> vec;
int i;
cout << "vec的原始大小: " << vec.size() << endl;

for (i = 0; i < 6; i++)
{
vec.push_back(i + 1);
}
cout << "vec扩展后大小: " << vec.size() << endl;

for (i = 0; i < 6; i++)
{
cout << "vec[" << i << "] 的值是:" << vec[i] << endl;
}

// 使用迭代器iterator访问值
vector<int>::iterator v = vec.begin();
while (v != vec.end())
{
cout << "迭代器*v的值:" << *v << endl;
v++;
}
cout << *vec.begin() << endl;
return 0;
}

vector的常用函数:

  • push_back(): 向vector的末尾插入值,如有必要,会扩展向量的大小;
  • size(): 显示向量的大小;
  • begin(): 返回一个指向向量开头的迭代器
  • end(): 返回一个指向向量结尾的迭代器
  • vector::iterator v = vec.begin();
作者

Gavin

发布于

2022-03-22

更新于

2022-03-22

许可协议

CC BY-NC-SA 4.0

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×