STL的一些基本概念
STL:Standard Template Libtary,标准模板库
STL中的三大概念:算法(algorithm)、容器(container)、迭代器(iterator)
容器主要包含有:
1.标准STL序列容器:
vector(可以存储基本数据类型,也可以存储类对象,相当于C++的数组)、
string(字符串)、
deque(双端队列)、
list(双端链表);
2.标准STL关联容器板:
set和multiset(集合和多重集合,key值和value相等,即键和值相等,但set不允许集合中的key重复,multiset允许key重复。能按特定顺序将集合中的元素排序,默认是升序排列)、
map和multimap(映射和多重映射,key值和value值不等,组成一个pair,但map不允许集合中的key重复,multimap允许key重复。能够快速检索和操作其中的元素);
3.非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串。(绳子(rope)是重型的“线(string));
4.非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap;
5.几种标准非STL容器,包括数组、bitset、valarray、stack、queue和priority_queue。值得注意的是,数组可以和STL算法配合,因为指针可以当作数组的迭代器使用。
STL的基本操作案例:
1 #include <iostream> 2 #include"vector" 3 #include"algorithm" 4 5 using namespace std; 6 7 class Teacher 8 { 9 public: 10 int age; 11 char name[64]; 12 13 void display() 14 { 15 cout<<"age="<<age<<endl; 16 }; 17 }; 18 19 //容器存储基本的数据类型 20 void fun1() 21 { 22 //容器,把你要的数据copy到容器中去 23 vector<int> v1; 24 v1.push_back(1); 25 v1.push_back(3); 26 v1.push_back(5); 27 28 //迭代器,实际上就是一个指针 29 for(vector<int>::iterator it=v1.begin(); it!=v1.end(); it++) 30 { 31 cout<<*it<<" "; 32 } 33 34 //算法 35 int num1=count(v1.begin(),v1.end(),3); 36 cout<<"num1="<<num1<<endl; 37 } 38 39 //容器存储类对象 40 void fun2() 41 { 42 Teacher t1,t2,t3; 43 t1.age=31; 44 t2.age=32; 45 t3.age=33; 46 47 vector<Teacher> v2; 48 v2.push_back(t1); 49 v2.push_back(t2); 50 v2.push_back(t3); 51 52 for(vector<Teacher>::iterator it=v2.begin();it != v2.end();it++) 53 { 54 it->display(); 55 } 56 } 57 58 //容器存储指向类对象的指针 59 void fun3() 60 { 61 Teacher t1,t2,t3; 62 t1.age=31; 63 t2.age=32; 64 t3.age=33; 65 66 Teacher* p1=&t1; 67 Teacher* p2=&t2; 68 Teacher* p3=&t3; 69 70 71 vector<Teacher*> v3; 72 v3.push_back(p1); 73 v3.push_back(p2); 74 v3.push_back(p3); 75 76 for(vector<Teacher*>::iterator it=v3.begin();it != v3.end();it++) 77 { 78 (*it)->display(); 79 } 80 } 81 82 int main() 83 { 84 //fun1(); 85 //fun2(); 86 fun3(); 87 return 0; 88 }
对STL中各种容器的一个总结: