所有容器类的共同操作
== !=
= 将某个容器赋值给另一个容器
empty() 会在容器无任何元素时返回true,否则返回false
size()  容器内当前含有的元素数目
clear() 删除所有元素


每个容器都提供begin()和end()两个函数,分别返回iterator,指向容器的第一个元素和最后一个元素的下一个位置


所有容器都提供insert()用以安插元素,以及提供erase()删除元素

list双向链表

deque对于最前端元素的安插和删除操作效率最高,末端元素相同。标准库的queue就是以deque来实现的,也就是说,以deque作为底

部,存储元素。

一 使用顺序容器

要使用序列式容器,首先必须包含相关的头文件
#include<vector>
#include<list>
#include<deque>

1 定义序列式容器对象的5种方法:
a 产生空的容器:
list<string> slist;
vector<int> ivec;

b 产生特定大小的容器,每个元素都以其默认值作为初值
list<int> ilist(1024);
vector<string> svec(32);

c 产生特定大小的容器,并为每个元素指定初值
vector<int> ivec(10,-1);
list<string> slist(16,"unassigned");

d 通过一对iterators产生容器,这对iterators用来标识一整组作为初值的元素区间
int ia[8]={1,1,2,3,5,8,13,21};
vector<int> fib(ia,ia+8);

e 根据某个容器产生新容器,复制原容器内的元素,作为新容器的初值。
list<string> slist;
list<string> slist2(slist);

允许在容器末尾进行安插和删除操作:
push_back():在末端安插一个元素
pop_back():删除最后一个元素

list和deque提供push_front()以及pop_front()

pop_front()与pop_back()都不会返回被删除的元素,如果需要读取最前端的元素front(),读取最末端的元素back();

2 insert()

a  iterator insert(iterator position,elemType value)可将value安插于position之前。它返回一个iterator,指向被安插的元素

list<int> ilist;
list<int>::iterator it=ilist.begin();
while(it!=ilist.end())
if(*it>=ival)
{
 ilist.insert(it,ival);
 break;
}
it++;
if(it==ilist.end())
ilist.push_back(ival);

b void insert(iterator position,int count,elemType value)在position之前安插count个元素,这些元素的值皆为value相同。

c void insert(iterator1 position,iterator2 first,iterator2 last)在positon之前安插[first,last)所标示的各个元素:

d iterator insert(iterator position);可在position之前插入元素,此元素的初值为其所属型别的默认值。

3 erase()操作
a iterator erase(iterator position) 可以抹除position所指的元素。

b iterator erase(iterator first,iterator last);抹除[first,last)范围内的元素

list不支持iterator的偏移运算
slist.erase(it1,it1+num_tries);//error

4 使用泛型算法
#include<algorithm>
4种常见的泛型搜索算法:
a find()用于搜索无序集合中是否存在某值。返回iterator

b binary_search()用于已序集合的搜寻。返回true

c cout()返回数值相符的元素数目

d search() 比较某个容器内师傅哦存在某个子序列。


template<class Type>
const Type& max(const Type &aval,const Type &bval)
max min返回aval和bval两个元素中较大的一个

template<class ForwardIterator>
ForwardIterator max_element(ForwardIterator first,ForwardIterator last);
max_element()返回一个iterator,指向[first,last)序列中值最大的元素。

vector<int> temp(vec.size());
copy(vec.begin(),vec.end(),temp.begin())

copy接受两个iterators,标示出复制范围。第三个iterator指向复制行为的目的地的第一个元素,后续元素会被依次塞入。

sort(temp.begin(),temp.end());

5 function objects
#include<functional>

6个算术运算符:plus<type>,minus<type>,negate<type>,multiplies<type>,divides<type>,modules<type>

6个关系:less<type> less_equal<type> greater<type> greater_equal<type> equal_to<type> not_equal_to<type> 

3个逻辑运算:logical_and<type>,logical_or<type>,logical_not<type>

默认情况下sort()使用底部元素的型别所供应的less运算符,我们可以传入greater运算符,使得元素以递减方式排序:
sort(vec.begin(),vec.end(),greater<int>());

其中的greater<int>()会产生一个匿名的class template object,传给sort()

6 函数对象适配器(adapter)
a binder adapter(绑定适配器)
将函数对象的参数绑定到特定值身上,使得二元函数对象转化为一元函数对象。
bind1st
bind2nd

iter=find_if(iter,vec.end(),bind2nd(lt,val));


b negator适配器
not1 not2


7 从文件中往vector拷贝数据,以及将vector数据写入到文件中
#include<iostream>
#include<fstream>
#include<iterator>
#include<algorithm>
#include<vector>

ifstream in_file("input_file.txt");
ofstream out_file("output_file.txt");

if(!in_file||!out_file)
{
cerr<<" ";
return -1;
}

istream_iterator<string> is(in_file);
istream_iterator<string> eof;

vector<string> text;
copy(is,eof,back_inserter(text));

sort(text.begin(),text.end());

ostream_iterator<string> os(out_file," ");
copy(text.begin(),text.end(),os);
 posted on 2009-08-28 19:39  清水湾  阅读(263)  评论(0)    收藏  举报