STL主要组件
容器(Containers)
迭代器(Iterators)
算法(Algorithms)
Containers
分类:
(1)序列式容器(可序——ordered)
其中每个元素都有固定的位置——取决于插入时机和地点
代表:vector deque list
(2)关联式容器(已序——sorted)
元素的位置取决于特定的排序准则,位置取决于元素的值
代表:set mulitset map multimap
容器的共通操作
ContType c 产生一个空的容器
ContType c1(c2) 产生一个同型的容器
ContType c(beg,end)
c.~ContType() 删除所有元素,释放内存
c.size()
c.empty() 判断容器是否为空,相当于size==0?如果是空,则c.empty()=1
c.max_size() 返回元素的最大可能数量
c1==c2
c1!=c2
c1<c2
c1>c2
c1=c2
c1.swap(c2) 交换c1与c2d的数据
swap(c1,c2) 是全局函数
c.begin() 指向第一个元素
c.end() 指向最后一个元素的下一个位置
c.rbegin() 返回一个逆向迭代器,指向逆向遍历时的第一个元素
c.rend() 返回一个逆向迭代器,指向逆向遍历时最后一个元素的下一个
c.insert(pos,elem)
c.erase(beg,end) 移除[beg,end]区间内所有元素
c.clear() 移除所有元素,容器为空
c.get_allocator() 返回容器的内存模型
Vector
概念:将元素至于动态数组中加以管理
#include<vector>
vector<typename> coll; //声明一个vector容器
for(int i=0;i<num;i++)
{
coll.push_back(i);//使用push_back()将元素插入到尾部
}
for(int i=0;i<coll.size();i++)
{
cout<<coll[i]<<endl; //可以直接定位到vector的某个位置,进行遍历
}
//vector优异性能的秘诀之一,就是配置比其所容纳的元素所需更多的内存
vector<typename> coll;
coll.reserve(80); //保留存储80个元素的内存,或者内存不够扩大之
coll.capacity() 返回重新分配空间之前能容纳的最大元素数量
//vector构造函数与析构函数
vector<Elem> c
vector<Elem> c1(c2) c1与c2同类型,将c2值拷贝到c1
vector<Elem> c(n) 大小为n
vector<Elem> c(n,elem) 大小为n,值全部是elem
vector<Elem> c(beg,end)
c.~vector<Elem>()
//vector赋值
c1=c2 将c2的全部元素赋值给c1
c.assign(n,elem) 复制n个elem,赋值给c
c.assign(beg,end)
c1.swap(c2) 互换,容量也发生互换
//vector直接存取
c.at(idx) //会做越界检查,出错返回out_of_range
c[idx]
c.front() //返回第一个元素,不检查是否存在
c.back() //返回最后一个元素,不检查是否存在
//vector插入与移除
c.insert(pos,elem) 返回新元素的位置
c.insert(pos,n,elem) 无返回值
c.insert(pos,beg,end)
c.push_back(elem)
c.pop_back()
c.erase(pos) 移除pos位置上的元素,返回下一个元素的位置
remove(coll.begin(),coll.end(),val) 删除coll中值为val的元素
find(coll.begin(),coll.end(),val) 找到第一个val的位置并返回
//print elements separated with space
#include<algorithm>
copy(scoll.begin(),scoll.end(),ostream_interator<string>(cout," "))