• stl之deque双端队列容器


    deque与vector很相似,不仅能够在尾部插入和删除元素,还能够在头部插入和删除。

    只是当考虑到容器元素的内存分配策略和操作性能时。deque相对vector较为有优势。

    头文件

    #include<deque>

    创建deque对象

    1)deque();//创建一个没有不论什么元素的deque对象。

    deque<int> d

    2)deque(size_typen);//创建一个具有n个元素的deque对象。每一个元素採用它的类型下的默认值。

    deque<int> d(10);//deque对象d有10个元素,每一个元素初始值为0。

    3)deque<size_type n, constT& value); //创建一个具有n个元素的deque对象,这些元素的初始值为value

    deque<double> d(10,5);

    4)deque(const deque&);//deque的拷贝构造函数,通过拷贝一个deque对象的元素值。创建一个新的deque对象。

    deque<char> d1(5,’a’);
    deque<char> d2(d1);
    

    5)deque(constInputIterator first, const InputIterator last, const A& a=A());

    //将迭代区间[first,last)所指的元素复制到一个新创建的deque对象中,当中内存分配器可缺省。

    //利用int数组iArray,创建一个deque对象d
    int iArray[]={1,2,3,4,5,6,7};
    deque<int> d(iArray, iArray+7);
    

    初始化赋值

    利用deque提供的push_back()函数,可在尾部压入新元素value。经常使用作deque容器的初始化赋值。

    元素的遍历訪问

    分别用数组方式迭代器方式訪问deque元素。

    #include <deque>
    #include <iostream>	
    using namespace std; 
    int main(void)
    {
    	deque<int> d;
    	int i;
    	d.push_back(13);
    	d.push_back(32);
    	d.push_back(29);
    	cout<<"数组方式訪问deque元素:"<<endl;
    	for(i=0; i < d.size(); i++)
    		cout << "d[" << i << "] = " << d[i] << endl;  
    	deque<int>::iterator j,jend;//定义迭代器
    	jend=d.end();
    	cout<<"迭代器訪问deque元素:"<<endl;
    	for (i=0,j=d.begin(); j!=jend;i++,j++)
    	{
    		cout << "d[" << i << "] = " << *j << endl; 
    	}
    	return 0;
    }
    


    元素的插入

    因为deque使用了两个迭代器分别指向双端队列的首尾,因此deque具有高效的头部插入元素的函数push_front()。中间位置的插入用insert()函数。

    void push_front(constT&);//头部插入

    iterator insert(iterator pos, const T& x);//pos位置之前,插入新元素x

    #include <deque>
    #include <iostream>
    using namespace std;
    int main(void)
    {	
    	deque<int> d;
    	d.push_back(6);
    	d.push_back(7);   
    	//头部插入
    	d.push_front(5);
    	for(int i=0; i<d.size(); i++)  //打印6 7
    		cout << d[i] << ' ';
    	cout << endl;
    	//中间位置插入
    	d.insert(d.begin() +1 ,9);     //在第个元素前插入,即9 6 7
    	for(int j=0; j<d.size(); j++)
    		cout << d[j] << ' ';
    	cout << endl;
    	return 0;
    }


    元素的删除

    deque容器提供了删除首元素的pop_front函数。删除尾元素的pop_back函数。删除任何位置或迭代区间上元素的erase函数。以及删除全部元素的clear函数。

    1)void pop_front();//删除deque的第一个元素

    2)void pop_back();//删除deque的最后一个元素

    3)iterator erase(iteratorpos); //删除pos所指向的元素

    4)iterator erase(iterator first, iterator last);//删除迭代区间[first,last)所指向的全部元素

    5)void clear();//删除全部元素

    #include <deque>
    #include <iostream>
    using namespace std;
    int main(void)
    {	
    	deque<int> d;
    	d.push_back(4);
    	d.push_back(5);
    	d.push_back(1);
    	d.push_back(1);
    	d.push_back(1);
    	d.push_back(6);
    	for(int i=0; i<d.size(); i++)
    		cout << d[i] << ' ' ;
    	cout << endl;
    	//头尾和任何位置删除元素
    	d.erase(d.begin() +1);
    	d.pop_front();
    	d.pop_back();
    	for(int j=0; j<d.size(); j++)
    		cout << d[j] << ' ' ;
    	cout << endl;
    	//删除所有元素
    	d.clear();
    	cout << "运行clear()" <<endl << "deque元素所有清除" << endl;
    	return 0;
    }
    

    其它函数与vector容器相似,这里不再赘述。详细可看前篇vector的应用


    此文为本人原创。转载请注明出处:http://blog.csdn.net/lsh_2013/article/details/46737877







  • 相关阅读:
    宠物收养场 Treap
    最佳课题选择
    [USACO08JAN]手机网络Cell Phone Network
    [USACO09MAR]地震损失2Earthquake Damage 2
    字符串距离 简单DP
    小行星群 网络流 二分图
    游览牧场 最小费用流
    BZOJ1391: [Ceoi2008]order
    BZOJ1570: [JSOI2008]Blue Mary的旅行
    BZOJ2243: [SDOI2011]染色
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5346383.html
Copyright © 2020-2023  润新知