所有容器类的共同操作
== !=
= 将某个容器赋值给另一个容器
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
浙公网安备 33010602011771号