std::deque::swap
函数原型:
void swap (deque& x);
交换内容
用x的内容交换容器的内容,x是另一个包含相同类型元素的双端队列对象。 大小可能会有所不同。
在调用此成员函数之后,此容器中的元素是调用之前在x中的元素,而x的元素是在其中的元素。 所有迭代器,引用和指针对交换的对象仍然有效。
请注意,存在一个具有相同名称的非成员函数,即swap,通过行为类似于该成员函数的优化使该算法过载。
参数:
x:
另一个具有相同类型(即,使用相同的模板参数T和Alloc实例化)的双端队列容器,其内容与此容器的内容交换。
返回值:
none
std::deque::insert
函数原型:
single element (1) iterator insert (const_iterator position, const value_type& val);
fill (2) iterator insert (const_iterator position, size_type n, const value_type& val);
range (3) template <class InputIterator>
iterator insert (const_iterator position, InputIterator first, InputIterator last);
move (4) iterator insert (const_iterator position, value_type&& val);
initializer list (5) iterator insert (const_iterator position, initializer_list<value_type> il);
插入元素
通过在指定位置的元素之前插入新元素来扩展双端队列容器。
这有效地通过插入的元素数量增加了容器的大小。
双端队列被设计为有效地从序列的结尾或开头执行插入(和删除)。 通常,插入其他位置的效率不如list或forward_list容器。
参数确定要插入多少个元素以及将它们初始化为哪些值:
参数:
position:
在容器中插入新元素的位置。
迭代器是成员类型,定义为指向元素的随机访问迭代器类型。
val:
要复制(或移动)到插入元素的值。
成员类型value_type是容器中元素的类型,在deque中定义为其第一个模板参数(T)的别名。
n:
要插入的元素数。 每个元素都初始化为val的副本。
成员类型size_type是无符号整数类型。
first,last:
指定元素范围的迭代器。 [first,last)范围内的元素副本插入到位置(顺序相同)。
请注意,范围包括first和last之间的所有元素,包括first指向的元素,但last指向的元素则不包括。
函数模板参数InputIterator应该是一个输入迭代器类型,该类型指向可以从其构造value_type对象的类型的元素。
il:
一个initializer_list对象。 这些元素的副本插入位置(顺序相同)。
这些对象是根据初始值设定项列表声明符自动构造的。
成员类型value_type是容器中元素的类型,在deque中定义为其第一个模板参数(T)的别名。
返回值:
指向新插入元素中的第一个的迭代器。
成员类型迭代器是指向元素的随机访问迭代器类型。
使用容器的分配器分配新元素的存储,分配器可能在失败时引发异常(对于默认分配器,如果分配请求未成功,则抛出bad_alloc)。
std::deque::erase
函数原型:
iterator erase (const_iterator position );
iterator erase (const_iterator first, const_iterator last );
擦除元素
从双端队列容器中删除单个元素(位置)或一系列元素([first,last))。
这有效地减少了容器尺寸,减少了被破坏的元素的数量。
双端队列的设计目的是在序列的末尾或开头高效地删除(和插入)元素。 通常,除去其他位置的效率不如list或forward_list容器中的效率。
参数:
position:
指向要从双端队列移除的单个元素的迭代器。
成员类型迭代器和const_iterator是指向元素的随机访问迭代器类型。
first, last:
指定要删除的双端队列中范围的迭代器:[first,last)。 即,范围包括在first和last之间的所有元素,包括first指向的元素,而不是last指向的元素。
成员类型迭代器和const_iterator是指向元素的随机访问迭代器类型。
返回值:
迭代器,指向元素的新位置,该元素位于函数调用删除的最后一个元素之后。 如果操作删除了序列中的最后一个元素,则这是容器的结尾。
成员类型迭代器是指向元素的随机访问迭代器类型。
std::deque::clear
函数原型:
void clear() noexcept;
清除内容
从双端队列中删除所有元素(已销毁),使容器的大小为0。
参数:
none
返回值:
none
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
void Out(double& Ele)
{
cout.width(5);
cout.precision(1);
cout<<std::fixed<<Ele<<" ";
}
void main()
{
deque<double>D1,D2;
for(int i=0;i<10;i++)
{
D1.push_front(90+i/10.0);
}
cout<<"All the element of 双端序列 D1:" <<endl;
for_each(D1.begin(),D1.end(),Out);
cout<<endl;
for(int i=0;i<10;i++)
{
D2.push_front(80+i/10.0);
}
cout<<"All the element of 双端序列 D2:" <<endl;
for_each(D2.begin(),D2.end(),Out);
cout<<endl;
D1.swap(D2);
cout<<"D1 swap D2 :"<<endl;
cout<<"All the element of 双端序列 D1:" <<endl;
for_each(D1.begin(),D1.end(),Out);
cout<<endl;
cout<<"All the element of 双端序列 D2:" <<endl;
for_each(D2.begin(),D2.end(),Out);
cout<<endl;
///插入三个元素
D1.insert(D1.begin(),-1.0);
D1.insert(D1.end(),-1.0);
D1.insert(D1.begin()+6,-0.0);
cout<<"All the element of 双端序列 D1:" <<endl;
for_each(D1.begin(),D1.end(),Out);
cout<<endl;
//删除两个元素
D1.erase(D1.begin()+1);
D1.erase(D1.begin()+10);
cout<<"All the element of 双端序列 D1:" <<endl;
for_each(D1.begin(),D1.end(),Out);
cout<<endl;
// 清空
D2.clear();
cout<<"D2 has been already cleared!"<<endl;
cout<<"All the element of 双端序列 D2:" <<endl;
for_each(D2.begin(),D2.end(),Out);
cout<<endl;
// 查找元素
deque<double>::iterator it=find(D1.begin(),D1.end(),80.5);
int step=(it-D1.begin());
cout<<"find 80.5. in D1 , its Index: "<<step<<" ."<<endl;
}