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;}
09-04 22:58
查看更多