STL基本概念
- STL叫标准模板库,几乎所有代码都采用了模板类或者模板函数,更好的提供了代码重用
- 广义上分为了容器,算法和迭代器,容器与算法之间通过迭代器无缝连接
- 优点是不需要额外安装什么,被内建在编译器中
- 特点是数据结构与算法分离,使得STL变得通用
容器
- 容器可以嵌套容器
- 包含序列式容器和关联式容器
- 序列式容器,元素位置由进入容器的时机和地点决定
- 关联式容器,已经有规则,元素位置不由进入容器的时机和地点决定
迭代器
- 可以理解为指针,默认指向第一个元素
- 对指针的操作都可以对迭代器操作
- 迭代器实际上是一个类对象,这个类封装了一个指针
- 做容器和算法之间的桥梁
算法
- 解决问题的方法
- STL大约有100个实现算法的函数,通过调用算法函数可以大大的提升效率
容器算法迭代器分离代码案例
#include<iostream>
using namespace std;
//算法,负责统计某元素个数
int mycount(int* start, int* end, int val)
{
int num = 0;
while (start != end)
{
if (*start == val)
{
num++;
}
start++;
}
return num;
}
int main(void)
{
//数组 容器
int arr[] = { 0,7,5,9,2,3,8,6,0 };
int* pBegin = arr;//迭代器开始位置
int* pEnd = &(arr[sizeof(arr) / sizeof(int)]);
int num = mycount(pBegin, pEnd, 0);
cout << "num:" << num << endl;
return 0;
}
STL的hello world
代码示例:
#include<iostream>
using namespace std;
#include<vector>//动态数组
#include<algorithm>//算法
void PrintVector(int v)
{
cout << v << " ";
}
//STL基本语法
void test01()
{
vector<int> v;//定义一个容器,并且指定容器存放类型是int
v.push_back(10);//放到容器尾部
v.push_back(20);
v.push_back(30);
v.push_back(40);
//通过STL提供了for_each算法
//容器提供迭代器
//vector<int>::iterator 迭代器类型
vector<int>::iterator pBegin = v.begin();
vector<int>::iterator pEnd = v.end();
//容器中可能存放基础数据类型,也可能存在自定义数据类型
for_each(pBegin, pEnd,PrintVector);
}
//容器也可以存放自定义数据类型
class Person
{
public:
Person(int age, int id) :age(age), id(id) {};
public:
int age;
int id;
};
void test02()
{
vector<Person> v;
Person p1(10, 20), p2(20, 30), p3(30, 40);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
//遍历
for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
{
cout << (*it).age << " "
<< (*it).id << endl;
}
}
void PrintTest03(Person* v)
{
cout << v->age << " "
<< v->id << endl;
}
void test03()
{
vector<Person*> v;
Person p1(10, 20), p2(20, 30), p3(30, 40);
Person *zp1 = &p1, *zp2 = &p2, *zp3 = &p3;
v.push_back(zp1);
v.push_back(zp2);
v.push_back(zp3);
//遍历
vector<Person*>::iterator pBegin = v.begin();
vector<Person*>::iterator pEnd = v.end();
for_each(pBegin, pEnd, PrintTest03);
}
int main(void)
{
//test01();
//test02();
test03();
return 0;
}
本文介绍了标准模板库(STL)的基本概念,包括容器、迭代器和算法三大部分,并通过实例展示了如何使用STL进行高效编程。
3823

被折叠的 条评论
为什么被折叠?



