C++编程(F)

Size valuetype top return cback const valuetype

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: ing University of Posts & Telecommunications Beijing young@buptnet.edu.cn 17.2 序列 序列遵循vector所描述的模式 标准库提供的基本序列包括:vector list deque 从它们出发,通过定义适当的界面,生成了 stack queue priority_queue 这几个序列被称为容器适配器(container adapters)、序列适配器(sequence adapters),或者简称适配器 Beijing University of Posts & Telecommunications Beijing young@buptnet.edu.cn 17.2.1 向量-vector 前面已经描述了vector的细节 只有vector提供了预留空间的功能 按默认规定,用的下标操作不做范围检 查,如果需要检查,请用at() vector提供随机访问迭代器 Beijing University of Posts & Telecommunications Beijing young@buptnet.edu.cn 17.2.2 表-list list是一种最合适于做元素插入和删除的序 列 由于下标访问操作太慢(与vector相比), list没有提供下标操作,也因为这个原因, list提供的是双向迭代器 list给出了vector所提供的几乎所有成员类 型和操作,例外的就是下标、capacity()、 和reserve() Beijing University of Posts & Telecommunications Beijing young@buptnet.edu.cn 17.2.2.1 粘接、排序和归并 list提供了若干特别适合于对表进行处理的操作, 这些操作都是稳定的 template <class T, class A = allocator<T> > class list { public: // 表的特殊操作 void splice(iterator pos, list& x); // 将x的所有元素移到本表的pos之前,且不作复制 void splice(iterator pos, list& x, iterator p); // 将x中的*p移到本表的pos之前,且不作复制 void splice(iterator pos, list& x, iterator first, iterator last); void merge(list&); // 归并排序的表 template <class Cmp> void merge(list&,Cmp); void sort(); template <class Cmp> void sort(Cmp); }; Beijing University of Posts & Telecommunications Beijing young@buptnet.edu.cn 粘接、排序和归并 例如:给出 fruit: apple pear citrus: orange grapefruit lemon 我们可以 list<string>::iterator p = find_if(fruit.begin(), fruit.end(), initial(‘p’)); fruit.splice(p, citrus, citrus.begin()); 将orange从citrus粘接入fruit,这样做的效果是从citrus删除了第一个元素,并 将它放到fruit里的第一个名字以p开始的元素之前 注意,这里的迭代器参数必须是合法的迭代器,确实指向应该指向的那个list list<string>::iterator p = find_if(fruit.begin(), fruit.end(), initial(‘p’)); fruit.splice(p, citrus, citrus.begin()); // ok fruit.splice(p, citrus, fruit.begin()); //错误:fruit.begin()并不指向citrus citrus.splice(p, frtui, fruit.begin()); //错误:p不是指向citrus Beijing University of Posts & Telecommunications Beijing young@buptnet.edu.cn 粘接、排序和归并 merge组合起两个排好序的表,方式是将一个list 的元素都取出来,将它们都放入另外一个表,且维 持正确的顺序 如果一个表未排序,merge()仍然能够产生一个 表,其中包含两个表的元素的并集,只是顺序不作 保证 f1: apple quince pear f2: lemon grapefruit orange lime 可以按: f1.sort(); f2.sort(); f1.merge(f2); // merge也不复制元素 其结...
View Full Document

Ask a homework question - tutors are online