容器:能放下元素
序列容器:元素的位置是进入容器的时间和地点决定
关联容器:容器规定好了,比如大的在前,小的在后
迭代器:可以理解为指针,用*能拿到元素,也能++,但迭代器其实是一个类?这个类封装了一个指针。
默认指向第一个位置.
算法:步骤有限,哪怕加法也是。查找、排序等。STL大约实现100个算法的函数。
写容器的提供迭代器,写算法的用迭代器。
迭代器开始和结束标志指针,begin、end都要提供
用到哪个容器,就导入哪个容器的头文件。
一般都有插入、删除、查找功能。
#include<iostream> #include<vector> #include<algorithm> using namespace std; //传入for_each的回调函数 void printInt(int v) { cout<<v<<'\t'; } //vector<int>类型的迭代器 void testInt() { vector<int> v; //放元素 v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); //开始和结束的迭代器 vector<int>::iterator begin = v.begin(); vector<int>::iterator end = v.end(); for_each(begin,end,printInt); cout<<endl; } //自建类型Person class Person { public: Person(){} Person(int id,int age):age(age),id(id){} void detail() { cout<<"id: "<<this->id<<" age: "<<this->age<<endl; } private: int age; int id; }; //自定义的Person类型放入容器 void testPerson() { Person p1(1,10); Person p2(2,20); vector<Person> v; v.push_back(p1); v.push_back(p2); //使用迭代器的循环方式 for(vector<Person>::iterator begin = v.begin();begin!=v.end();begin++) { //可能是迭代器重载了*号,因此可以用这个得到对象 (*begin).detail(); } } //嵌套容器的回调打印函数 //这里假设是容器里面嵌套了int容器 void printNesting(vector<int> v) { //这些都是前面现成的 vector<int>::iterator begin = v.begin(); vector<int>::iterator end = v.end(); for_each(begin,end,printInt); } typedef vector<int>(VECTOR); //嵌套容器 void testNesting() { //定义一个数组容器的容器 //vector<VECTOR> v_nest; //这个可以 vector<vector<int> > v_nest; vector<int> v1; v1.push_back(1); v1.push_back(2); v1.push_back(3); v1.push_back(4); vector<int> v2; v2.push_back(11); v2.push_back(22); v2.push_back(32); v2.push_back(42); v_nest.push_back(v1); v_nest.push_back(v2); vector<VECTOR>::iterator begin = v_nest.begin(); vector<VECTOR>::iterator end = v_nest.end(); for_each(begin,end,printNesting); } int main() { //testInt(); //testPerson(); testNesting(); return 0; }