C++ STL(标准模板库)
容器、算法、迭代器
STL 数据结构与算法的有效分离
可以根据以下程序先进行一定的理解,不同的main()注意切换
#include<iostream>
#include"vector" //容器头文件
#include"algorithm" //算法库头文件
using namespace std;
/*总结*/
//1 容器是将元素拷贝进来,要确保元素可以复制,只要涉及到类对象的时候,成员是否有指针将会有关于深拷贝浅拷贝的问题
//2 容器不仅可以装基本数据类型,还可以装元素,还可以装指针
//3 迭代器可以遍历各种各样的容器 取决于容器中组装的元素
//4 算法 与 迭代器无缝衔接
void printfV(vector<int> &a) //使用引用
{
a.push_back(1); //将数据存到vector容器之中
a.push_back(2);
a.push_back(3);
a.push_back(3);
a.push_back(3);
//迭代器相当于一个指针 具有很多分类
for (vector<int>::iterator it = a.begin(); it != a.end(); it++) //使用到了迭代器
{
cout << *it << " " ;
}
}
//容器中可以安装基础数据类型变量
int main1()
{
vector<int> v1; //vector 容器 将元素拷贝到容器之中
printfV(v1);
//算法 举例一个count()算法
int num1 = count(v1.begin(), v1.end(), 3); //查找容器中3的个数并且进行一个返回
cout << "num1 = " << num1 << endl;
system("pause");
return 0;
}
class Teacher
{
public:
Teacher()
{
age = 33;
}
public:
int age;
};
//容器中可以安装类对象
int main2()
{
Teacher v1,v2,v3;
vector<Teacher> a;
a.push_back(v1); //将类的对象存到vector容器之中 并且容器有效的实现了算法与数据类型的分离
a.push_back(v2);
a.push_back(v3);
//迭代器相当于一个指针 具有很多分类
for (vector<Teacher>::iterator it = a.begin(); it != a.end(); it++) //使用到了迭代器
{
cout << it->age << " ";
}
system("pause");
return 0;
}
//容器中还可以放置指针
int main()
{
Teacher d, e, f;
d.age = 31;
e.age = 32;
f.age = 33;
Teacher * v1, *v2, *v3; //指针
v1 = &d; //指向一定的对象,否则会出现空指针
v2 = &e;
v3 = &f;
vector<Teacher *> a;
a.push_back(v1); //将类的对象存到vector容器之中 并且容器有效的实现了算法与数据类型的分离
a.push_back(v2);
a.push_back(v3);
//迭代器相当于一个指针 具有很多分类
for (vector<Teacher *>::iterator it = a.begin(); it != a.end(); it++) //使用到了迭代器
{
//使用(*it) 是因为本身it指向的为指针变量,因此获取值,还需要在增加一个*号
cout << (*it)->age << " ";
}
system("pause");
return 0;
}