简介
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);
}