C++ STL标准库:std::deque 元素的交换swap() 插入insert() 擦除erase() 清空clear()的使用

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;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级D洋葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值