STL的头文件不再使用常规的 .H 扩展, 避免和其他头文件冲突.扩展的容器类还有 multimap multiset priority_queue常用容器队列容器: vector deque list关联容器: set mapvector : 动态数组, 是基本数组的类模板. vector vi; //初始长度为0的空向量 vector vi(init_size, 0); //init_size可以用const预定义, 0为初始化值. vector v3(v2); //复制构造函数, 完全复制. vector v4(first,last); //产生初始值为一个区间的向量. 包括first, 不包括last 迭代 for (int i=0; iconst_iterator或者iterator it=vi.begin(); it!=vi.end(); ++it) *p=xxx;#include#include#includeusing namespace std;int iArr[10] = {1,23,4,56,7,89,0,12,3,1}; char* szArr = "Hello World";int main(void){ vector vec0(3, 0); vector vec1(iArr, iArr+10); //vec1 的内容为 "1 23 4 56 7 89 0 12 3 45" vector vec2(szArr, szArr+strlen(szArr)); //vec2 的内容为 "H e l l o W o r l d" if (vec1[9] == vec1.at(9)) { cout " //打印 vec1[9] == vec1.at(9) --> 1 == 1 } if (vec1.front() == vec1.back()) { cout " //打印 vec1.front() == vec1.back() --> 1 == 1 } //vec1.insert(vec1.begin()+1, vec0.begin(), vec0.end()); //此时vec1为 "1 0 0 0 23 4 56 7 89 0 12 3 45" //vec1.erase(vec1.begin()+1, vec1.end()-2); //此时变成 " 1 3 1 ", 即保留第一个元素, 后面保留两个元素 //vec1.assign(4, 888); //把vec1重新定义成 4个元素, 每个元素的初始值为 888 //vec1.pop_back(); //删除最后一个元素 for (vector::const_iterator p=vec1.begin(); p!=vec1.end(); ++p) cout cout for (vector::const_iterator p=vec2.begin(); p!=vec2.end(); ++p) cout cout return 0;}其他api如vi.push_back(2) //把2元素放到vi的后面vi.insert(vi.begin()+1, 2); //把2元素放到vi的第一个位置上.vi.insert(vi.begin()+1, v3.begin(), v3.end()); //在vi第一的位置上开始插入v3的所有成员.vi.assign(8,1); //给vi重新赋值, 8个成员的初始值都为1.vi.front() ; //vi的第0个成员vi.back(); //vi最后一个成员.vi.at(4); //vi的第5个成员.vi[4]; //vi的第5个成员.vi.size();//vi的成员个数vi.empty(); //判断成员是否为空.vi.pop_back(); //把最后一个成员移除vi.erase(vi.begin()+1, vi.end()-2); //删除成员deque : double queue. 支持随机访问和快速插入删除, 在容器的某个位置上花费的时间为线性时间. 同时支持开始断插入数据API. push_front(); 不支持capacity() 和 reserve(). 其他操作和 vector 相同.list 是双线性列表, 只能顺序访问(从前到后, 或者从后到前), 不支持随机访问, 不能用下标[]操作符.但仍然有 erase() insert() push_back() push_front()操作.特有的sort(); 排序列表merge() 合并两个排序 listsplice() 拼接两个 list , 将元素从x转移到当前容器中,并将其插入对应位置。效果是X容器中对应的元素被移除, 目标容器的内容被加入. 从而改变了两个容器的大小.entire list (1)void splice (const_iterator position, list& x);void splice (const_iterator position, list&& x);single element (2)void splice (const_iterator position, list& x, const_iterator i);void splice (const_iterator position, list&& x, const_iterator i);element range (3)void splice (const_iterator position, list& x, const_iterator first, const_iterator last);void splice (const_iterator position, list&& x, const_iterator first, const_iterator last);#include iostream>#include list>int main (){ std::listint> mylist1, mylist2; std::listint>::iterator it; // set some initial values: for (int i=1; i=4; ++i) mylist1.push_back(i); // mylist1: 1 2 3 4 for (int i=1; i=3; ++i) mylist2.push_back(i*10); // mylist2: 10 20 30 it = mylist1.begin(); ++it; // points to 2 //整体转移 mylist1.splice (it, mylist2); // mylist1: 1 10 20 30 2 3 4 // mylist2 (empty) 整个被转移了. // "it" still points to 2 (the 5th element) //转移一个 mylist2.splice (mylist2.begin(), mylist1, it); // mylist1: 1 10 20 30 3 4 // mylist2: 2 // "it" is now invalid. it = mylist1.begin(); //将迭代器向前移动n个元素位置 std::advance(it,3); // "it" points now to 30 //转移一批. mylist1.splice ( mylist1.begin(), mylist1, it, mylist1.end()); // mylist1: 30 3 4 1 10 20 std::cout "mylist1 contains:"; for (it=mylist1.begin(); it!=mylist1.end(); ++it) std::cout ' ' *it; std::cout '\n'; //mylist1 contains: 30 3 4 1 10 20 std::cout "mylist2 contains:"; for (it=mylist2.begin(); it!=mylist2.end(); ++it) std::cout ' ' *it; std::cout '\n'; //mylist2 contains: 2 return 0;}