C++容器之deque

简介

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

成员函数


复制控制


deque::deque

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

deque::~deque

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

deque::operator=

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

示例代码

#include<iostream>
#include<deque>
 
using namespace std;
 
void
print(deque<int> deq)
{
    for(deque<int>::iterator it = deq.begin();
it != deq.end(); ++it)
    {
       cout << *it << "";
    }
    cout << endl;
}
 
int
main(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;
 
int
main(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;
 
int
main(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;
 
int
main(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;
 
void
print(deque<int> deq)
{
    for(deque<int>::iterator it = deq.begin(); it != deq.end(); ++it)
    {
       cout << *it << "";
    }
    cout << endl;
}
 
int
main(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值