- 容器
- 序列式容器
- 容器的元素的位置是由进入容器时间和地点决定
- 关联式容器
- 进入容器的的元素的位置不是进入容器的时间和地点决定
- 序列式容器
- 算法
- 通过有限的步骤,解决问题
- STL提供了大约100个实现算法的模板函数
- 迭代器
- 用来遍历容器中元素的指针,可以理解为指针,对指针的操作基本都可以对迭代器操作
- 实际上,迭代器是一个类,这个类封装了一个指针
- 迭代器作为容器开发者和算法开发者间的桥梁
#include <iostream> #include <vector>//动态数组或可变数组 #include <algorithm>//算法 using namespace std; //STL基本语法 void printvector(int v) { cout<<v<<" "; } void test1(){ vector<int> v;//定义一个容器,并且指定这个容器存放的元素类型是int v.push_back(10); v.push_back(9); v.push_back(8); //通过STL提供的for_each算法遍历 //容器提供迭代器件 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){ this->age=age; this->id=id; } int age; int id; }; void test2(){ vector<person> v;//创建容器,并且指定容器的元素类型是person person p1(11,22); person p2(33,44); v.push_back(p1);//向容器放入元素 v.push_back(p2); //遍历 for (vector<person>::iterator it =v.begin();it != v.end();it++)//可以把迭代器看为指针 { cout<<(*it).age<<" "<<(*it).id<<endl; } } //容器中存放person类指针,并且调用for_each算法 void print_vector(person* pp) { cout<<"id= "<<(*pp).id<<"age= "<<(*pp).age<<endl; } void test3() { vector<person*> v1; person* p1=new person(11,22); person* p2=new person(33,44); v1.push_back(p1); v1.push_back(p2); vector<person*>::iterator it=v1.begin(); vector<person*>::iterator end=v1.end(); for_each(it,end,print_vector); } int main() { test1(); cout<<"--------------------------"<<endl; test2(); cout<<"-------------------------"<<endl; test3(); return 0; }