您的位置:首页 > 产品设计 > UI/UE

STL学习之路(一) deque

2016-07-28 19:05 405 查看


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:

namefunction
operator[]Access element (public member function )
atAccess element (public member function )
frontAccess first element (public member function )
backAccess last element (public member function )
以上是访问元素用的函数,很常用。


Modifiers:

namefunction
assignAssign container content (public member function )
push_backAdd element at the end (public member function )
push_frontInsert element at beginning (public member function )
pop_backDelete last element (public member function )
pop_frontDelete first element (public member function )
insertInsert elements (public member function )
eraseErase elements (public member function )
swapSwap content (public member function )
clearClear content (public member function )
emplaceConstruct and insert element (public member function )
emplace_frontConstruct and insert element at beginning (public member function )
emplace_backConstruct 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)区间内插入元素。

position参数为新元素将要插入的位置,是一个指向元素的迭代器。

val为待插入元素的值,成员类型 value_type是该容器的元素的类型,作为 deque实例化时第一个模板参数的别名而存在

first,last

分别指向一个序列中初始及末尾位置的输入迭代器。这个范围即 [first,last) ,包括 first 到 last 间的所有元素,包括 first 指向的元素,但不包括 last 指向的元素

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

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

deque::emplace

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

emplace_front在首部插入新元素,emplace_back在尾部插入元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stl