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:
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)区间内插入元素。
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中的常用算法
- STL区间成员函数及区间算法总结
- c++ STL容器总结之:vertor与list的应用
- C++在成员函数中使用STL的find_if函数实例
- 关于STL中list容器的一些总结
- 关于STL中的map容器的一些总结
- 浅析stl序列容器(map和set)的仿函数排序
- STL list链表的用法详细解析
- stl容器set,map,vector之erase用法与返回值详细解析
- STl中的排序算法详细解析
- 关于STL中vector容器的一些总结
- 关于STL中set容器的一些总结
- 简单说说STL的内存管理
- STL与泛型编程(1)---模板
- CppUtest发现的STL容器内存泄漏问题
- STL中算法
- STL简单应用
- vector-list-deque
- 三十分钟掌握STL
- Qt中QSet的使用