C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。
在C++标准库中,STL被组织成为下面的13个头文件:<algorithm>, <deque>, <functional>, <iterator>, <vector>, <list>, <map>, <memory>, <numeric>, <queue>, <set>, <stack>和 <utility>
1,vector向量容器
vector是一种简单高效的容器,在尾端插入何删除元素,算法时间复杂度为O(1),其他元素插入和删除为O(n)。vector可动态调整所占用的内存空间。
用数组方式访问vector元素的参考代码如下图所示:
#include<iostream> #include<cstdio> #include<vector> using namespace std; int main() { vector<int> v; v.push_back(20); //尾端插入新元素 v.push_back(26); v.push_back(12); for(int i = 0; i < v.size(); i++) cout<<v[i]<<‘ ‘; getchar(); return 0; }
运行结果
#include<iostream> #include<cstdio> #include<vector> using namespace std; int main() { int j; vector<int> v; v.push_back(0); //尾端插入新元素 v.push_back(1); //v.clear(); //全部清空元素 v.push_back(2); v.insert(v.begin()+2, 9); //插入9在第二个后面 v.insert(v.begin(), 5); //插入5为首元素 v.insert(v.end(), 12); //插入12为末元素 v.erase(v.begin()+1); //删除第二个元素 v.erase(v.begin(), v.begin()+2); //删除前三个元素 vector<int>::iterator i; //迭代器相当于游标 for(i = v.begin(), j = 0; i != v.end(); i++, j++) cout<<"v["<<j<<"]="<<*i<<endl; swap(v[1], v[2]); for(i = v.begin(), j = 0; i != v.end(); i++, j++) cout<<"v["<<j<<"]="<<*i<<endl; cout<<v.empty()<<endl; //判断是否为空 cout<<v.size()<<endl; //元素实际个数 cout<<v.max_size()<<endl; //可容纳的最大元素个数 cout<<v.capacity()<<endl; //当前可容纳的vector元素个数 cout<<v.front()<<endl; //首元素引用 cout<<v.back()<<endl; //末尾元素引用 v.pop_back(); //删除末尾元素 v.reserve(30); //调整数据空间大小 cout<<v.capacity()<<endl; vector<int>::reverse_iterator ri; //反响迭代器 for(ri = v.rbegin(); ri != v.rend(); ri++) //首尾反向 cout<<*ri<<" "; getchar(); return 0; }
运行结果
结构体容器参考代码如下
#include<iostream> #include<cstdio> #include<vector> using namespace std; struct stu { int x; int y; }; int main() { int j; vector<stu> v1; //结构体容器 vector<stu> v2; struct stu a = {1, 2}; struct stu b = {2, 3}; struct stu c = {4, 5}; v1.push_back(a); v1.push_back(b); v1.push_back(c); v2.push_back(c); v2.push_back(b); v2.push_back(a); cout<<"v1:\n"; for( int i = 0; i < v1.size(); i++) cout<<v1[i].x<<" "<<v1[i].y<<endl; cout<<"v2:\n"; for(int i = 0; i < v2.size(); i++) cout<<v2[i].x<<" "<<v2[i].y<<endl; swap(v1, v2); cout<<"v1:\n"; for(int i = 0; i <v1.size(); i++) cout<<v1[i].x<<" "<<v1[i].y<<endl; cout<<"v2:\n"; for(int i = 0; i < v2.size(); i++) cout<<v2[i].x<<" "<<v2[i].y<<endl; getchar(); return 0; }
运行结果: