C++容器之deque

来源:互联网 发布:我的淘宝已买到的宝贝 编辑:程序博客网 时间:2024/06/04 23:35

简介

         Deque是double-endedqueue的缩写。Deque的很多操作类似于vector,但是deque允许从它前面和后面插入删除数据。

成员函数


复制控制


deque::deque

         构造函数:构造一个deque对象,根据构造函数版本初始化该对象。

deque::~deque

         析构函数:销毁一个deque对象。

deque::operator=

         赋值函数:为deque对象分配新的元素以替换原来的元素,并随之改变其大小。

示例代码

#include<iostream>#include<deque> using namespace std; voidprint(deque<int> deq){    for(deque<int>::iterator it = deq.begin();it != deq.end(); ++it)    {       cout << *it << "";    }    cout << endl;} intmain(void){    int arr[] = {1, 2, 3};       // deque::deque    deque<int> first;    deque<int> second(5,1);    deque<int> third(second.begin(), second.end());    deque<int> fourth(third);    deque<int> fifth(arr, arr + sizeof(arr)/sizeof(int));       first = second;    print(first);    first = fifth;    print(first);       return(0);}

迭代器


deque::begin()

         返回指向deque容器第一个元素的迭代器。返回类型iterator/const_iterator。

deque::end()

         返回指向deque容器最后一个元素的下一个位置的迭代器,该迭代器不能被引用。返回值类型iterator/

const_iterator。

deque::rbegin()

         返回指向deque容器最后一个元素的反转迭代器。返回值类型reverse_iterator/const_reverse_iterator。

deque::rend()

         返回指向deque容器第一个元素前一个位置的反转迭代器,该迭代器不能被引用。返回值类型为reverse_iterator/const_reverse_iterator。

deque::cbegin()

        begin()函数的const版本。返回值类型为const_iterator,它指向的内容是const类型,不能利用该迭代器去修改其指向的内容。

deque::cend()

       end()函数的const版本。返回值类型为const_iterator,它指向的内容是const类型,不能利用该迭代器去修改其指向的内容。

deque::crbegin()

         rbegin()函数的const版本。返回值类型为const_iterator,它指向的内容是const类型,不能利用该迭代器去修改其指向的内容。

deque::crend()

         rend()函数的const版本。返回值类型为const_iterator,它指向的内容是const类型,不能利用该迭代器去修改其指向的内容。

示例程序

#include<iostream>#include<deque> using namespace std; intmain(void){    deque<int> first(5, 1);    deque<int> const second(5, 2);       for(deque<int>::iterator it = first.begin();it != first.end(); ++it)    {       cout << *it << "";    }    cout << endl;       for(deque<int>::const_iterator it = second.cbegin();it != second.cend(); ++it)    {       // *it = 3   // error       cout << *it << "";    }    cout << endl;       return(0);}

Capacity


deque::size()

         返回deque容器中元素的个数。返回值类型:deque::size_type。

deque::max_size()

         返回deque容器能存放元素个数的最大值。返回值类型:deque::size_type。

deque::resize()

         重置deque容器大小,使之能存入指定书目的元素。

deque::empty()

         判断deque是否为空,为空返回true,否则返回false。

deque::shrink_to_fit()

         将deque的容量减少到当前存储数据的大小。

示例代码

        

#include<iostream>#include<deque> using namespace std; intmain(void){    deque<int> first(100);       // deque::size    cout << "dequesize : " << first.size() << endl;    // deque::max_size    cout << "dequemax_size : " << first.max_size() << endl;    // deque::resize    first.resize(10);    cout << "dequefirst size : " << first.size() << endl;     // deque::shrink_to_fit    first.shrink_to_fit();       return(0);}

Element access


deque::operator[]

         返回指向deque容器指定位置元素的一个引用。返回值类型reference/const_reference。

deque::at()

         返回指向deque容器指定位置元素的一个引用。返回值类型reference/const_reference。

deque::front()

        返容器第一个元素的引用。返回值类型reference/const_reference。

deque::back()

         返回指向deque容器最后一个元素的引用。返回值类型reference/const_reference。

示例程序

#include<iostream>#include<deque> using namespace std; intmain(void){    deque<int> first;       for(int i = 0; i < 5; i++)    {       first.push_back(i + 1);    }     cout << "deque::operator[]: " << first[0] << endl;    cout << "deque::at(): " << first.at(0) << endl;    cout << "deque::front(): " << first.front() << endl;    cout << "deque::back():" << first.back() << endl;       //deque<int>::reference re = first.at(0);    deque<int>::referencere = first.front();    re = 10;    cout << "Thefirst element is : " << first.front() << endl;       return(0);}

Modifiers


deque::assign()

         为deque容器分配新的元素以代替现有元素,随之修改其大小。

deque::push_back()

         在deque容器的末尾插入一个元素。

deque::push_front()

         在deque容器前端插入一个元素。

deque::pop_back()

        删除deque容器末端的最后一个元素。

deque::pop_front()

         删除deque容器前端第一个元素。

deque::insert()

         在指定位置插入一个新元素。返回一个迭代器,指向插入的第一个元素。

deque::erase()

         从deque容器中删除一个或多个元素。返回一个迭代器,指向被删除元素后面的一个元素。

deque::swap()

         交换两个deque容器中的元素。两个容器类型必须相同,大小可以不同。

deque::clear()

         清空deque容器,其大小变为0。

deque::emplace()

         在deque容器指定位置放置一个元素。返回一个迭代器,指向放置元素的当前位置。

deque::emplace_front()

         在deque容器前端放置一个元素。

deque::emplace_back()

         在deque容器末端放置一个元素。

示例程序

#include<iostream>#include<vector>#include<deque> using namespace std; voidprint(deque<int> deq){    for(deque<int>::iterator it = deq.begin(); it != deq.end(); ++it)    {       cout << *it << "";    }    cout << endl;} intmain(void){    deque<int> first;    deque<int> second;    deque<int> third;    int arr[] = {1, 2, 3, 4, 5};       // deque::assign    first.assign(5, 10);    second.assign(first.begin(), first.end());    third.assign(arr, arr + sizeof(arr)/sizeof(int));    print(first);    print(second);    print(third);       // deque::push_front push_back    third.push_front(0);    print(third);    third.push_back(6);    print(third);       // deque::pop_front pop_back    third.pop_front();    print(third);    third.pop_back();    print(third);       // deque::insert    third.insert(third.begin(), 10);    print(third);    third.insert(third.end(), 2, 20);    print(third);    vector<int> vec(2, 30);    third.insert(third.end(), vec.begin(), vec.end());    print(third);       // deque::erase    third.erase(third.begin());    print(third);    third.erase(third.end() - 2, third.end());    print(third);       // deque::swap    third.swap(second);    cout << "Second: ";    print(second);    cout << "Third: ";    print(third);       // deque::emplace emplace_back emplace_front    third.emplace(third.begin() + 1, 20);    print(third);    third.emplace_back(20);    print(third);    third.emplace_front(20);    print(third);       return(0);}


0 0