容器:管理序列的类,通过容器类提供的成员函数,实现各中队序列中元素的操作。
STL提供了各种容器类模板,通常这些模板类包括:向量(vector),列表(list),双队列(deque),集合(set),多重集合(multiset),映射(map),多重映射(multimap)。
vector可以认为是动态数组;list是由节点组成的双线列表,每个节点包括一个元素;双队列(deque)是包含N个连续的指向不同元素的指针组成的数组;集合(set)是由节点组成的,每个节点包含一个元素,节点间以某种谓词排序;多重集合(multiset)是允许存在两个次序相等的元素集合;映射(map)是由{键,值}对组成的集合,同样以某种谓词排序;多重映射(multimap)是允许键对包含相等次序的映射。
容器成员:容器成员必须满足3个条件1.元素必须时刻复制的;2.元素必须可赋值;3.元素必须可以被释放。
容器函数:容器均能提供value,而非reference;所有的元素自动形成顺序;函数使用者必须确保传递的参数符合要求。
STL容器种类:序列式容器;关联性容器;容器配接器。
序列式容器:vector动态数组,deque双向队列,list双向串形;
关联性容器:set,multiset,map,multimap,hash(哈希表);
容器配接器:以某种STL容器作为底,修改器接口,具备各自的特点。包括stack,queue,priority_queue.
STL容器的数据结构:string字符串,bitset,valarray。
例子1:
#include<iostream>
#include<bitset>
#include<string>
using namespace std;
int main()
{
bitset<10> bs1(7);//bitset中长度为10个bit,初始化为10进制7
bitset<10> bs2(string("1000101011"));//初始化为10个字符长度的字符串
cout<<bs1<<endl;
cout<<bs2<<endl;
system("pause");
return 0;
}
例子2:
#include<iostream>
#include<valarray>
using namespace std;
template <typename T> void printValarray(const valarray<T>& va)
{
for(int i=0;i<va.size();++i)
cout<<va[i]<<' ';
cout<<endl;
}
int main()
{
valarray<int> val(4); //包含四个元素,但没有初始化
printValarray(val); //输出
valarray<int> va2(3,4); //包含四个元素,其数值均为3
printValarray(va2);
int ia[]={1,2,3,4,5,6};
valarray<int> va3(ia,sizeof(ia)/sizeof(ia[0]));//动态数组,大小和ia的元素个数相同
printValarray(va3);
valarray<int> va4(ia+1,4); //4个元素,数值分别为数组ia的前四个元素加1
printValarray(va4);
val=(va2+va4)*va4; //给val赋值
printValarray(val);
cin.get(); //任意键退出
}