STL学习之路(一) deque

来源:互联网 发布:苹果手机淘宝p图软件 编辑:程序博客网 时间:2024/06/06 22:05

std::deque

deque (usually pronounced like “deck”) is an irregular acronym of double-ended queue. Double-ended queues are sequence containers with dynamic sizes that can be expanded or contracted on both ends (either its front or its back).

deque是一种双向队列,具有动态分配的功能,可以快速地在首尾进行插入删除。

deque具有随机访问的特性,也可以在中间进行插入删除,但是性能没有vector好。

Member functions

Iterators

name | function—|—begin | Return iterator to beginning (public member function )end | Return iterator to end (public member function )rbegin |Return reverse iterator to reverse beginning (public member function )rend | Return reverse iterator to reverse end (public member function )cbegin | Return const_iterator to beginning (public member function )cend | Return const_iterator to end (public member function )crbegin | Return const_reverse_iterator to reverse beginning (public member function )crend | Return const_reverse_iterator to reverse end (public member function )

rbegin

rbegin是deque类中的一个公有函数,返回一个指向当前deque最后一个元素的反向迭代器,反向迭代器随着值的增加,将更靠近首元素。> 区别于 deque::back,当前函数返回的是指向最后一个元素的逆序随机访问迭代器(Reverse random access iterator),而 deque::back 返回指向最后一个元素的引用(Reference)。

rend

deque 类模板的公共成员函数。返回指向当前 deque 对象中第一个元素之前( Preceding the first)的元素的逆序迭代器。 用法参考rbegin。

示例代码:

#include<iostream>#include<deque>using namespace std;int main(void){    class Test_rbegin{        public:            deque<int> :: iterator pos;            deque<int> :: reverse_iterator rpos;/*because deque::rbegin return a reverse_iterator*/        public:            void traverse(deque<int> &que){                for(pos=que.begin();pos!=que.end();pos++)                    cout<<*pos<<" ";                cout<<endl;            }            void reverse(deque<int> &que){                for(rpos=que.rbegin();rpos!=que.rend();rpos++)                    cout<<*rpos<<" ";                cout<<endl;            }    };    class Test_rbegin test;    deque<int> que(5,0);    for(int i=0;i<5;i++)        que[i]=i;    cout<<"After Initial the que"<<endl;    test.traverse(que);    cout<<"Reverse the que by deque::rbegin() iterator"<<endl;    test.reverse(que);} 

Capacity

name | function—|—size|Return size (public member function )max_size|Return maximum size (public member function )resize|Change size (public member function )empty|Test whether container is empty (public member function )shrink_to_fit |Shrink to fit (public member function )

前四个函数都很常用,最后一个是为了缩小容器容量以存放所有元素,因为deque通常会分配比当前元素多的内存,以便更快的进行插入删除操作。

Element access:

name function operator[] Access element (public member function ) at Access element (public member function ) front Access first element (public member function ) back Access last element (public member function )

以上是访问元素用的函数,很常用。

Modifiers:

name function assign Assign container content (public member function ) push_back Add element at the end (public member function ) push_front Insert element at beginning (public member function ) pop_back Delete last element (public member function ) pop_front Delete first element (public member function ) insert Insert elements (public member function ) erase Erase elements (public member function ) swap Swap content (public member function ) clear Clear content (public member function ) emplace Construct and insert element (public member function ) emplace_front Construct and insert element at beginning (public member function ) emplace_back Construct and insert element at the end (public member function )
// <deque>iterator erase (const_iterator position);iterator erase (const_iterator first, const_iterator last);

deque::erase是deque类的公有函数,删除单个元素,或一个区间内的元素。

// <deque>// 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);

deque::insert
insert函数可以向deque中插入元素,可以插入单个元素,插入多个元素,向[first,last)区间内插入元素。

  1. position参数为新元素将要插入的位置,是一个指向元素的迭代器。
  2. val为待插入元素的值,成员类型 value_type是该容器的元素的类型,作为 deque实例化时第一个模板参数的别名而存在
  3. first,last
    分别指向一个序列中初始及末尾位置的输入迭代器。这个范围即 [first,last) ,包括 first 到 last 间的所有元素,包括 first 指向的元素,但不包括 last 指向的元素

deque :: swap是deque类的公有函数,使另一个同类型的deque中的x与之交换。

非成员函数 std :: swap提供了类似当前函数的功能,但做了一些优化。

deque::emplace
在指定位置处的元素前插入一个新的元素。新的元素是以 args 作为其构造函数的参数而构造的。

emplace_front在首部插入新元素,emplace_back在尾部插入元素。

0 0
原创粉丝点击