参考:c++ STL
deque是双向开口的连续线性空间,可以在头、尾两端插入和删除元素。deque常用函数如下:
1. assign() 赋值,用法为:
deq.assign(begin,end)
将迭代器[begin,end)的内容赋值给deq。
deq.assign(n,elem)
将n个elem赋值给deq。
2.数据访问
deq.at(idx)
deq[idx]
返回索引idx所指数据的引用,at会检测idx是否越界,[ ]则不会。
deq.front()
返回第一个数据的引用。
deq.back()
返回最后一个数的引用。
deq.begin()
返回指向第一个数据的迭代器。
deq.end()
返回最后一个数据的下一个位置的迭代器。
deq.rbegin()
返回逆向队列的第一个数据的迭代器。
deq.rend()
返回逆向队列的最后一个数据的下一个位置的迭代器。
上面的迭代器在前面加c返回const的迭代器。
3.添加数据
deq.pop_back(elem)
在尾部插入一个数据
deq.push_front(elem)
在头部插入一个数据
deq.insert(pos,elem)
在pos位置插入一个数据的拷贝,返回新数据位置。
deq.insert(pos,n,elem)
在pos位置插入n个数据,无返回值。
deq.insert(pos,begin,end)
在pos位置插入迭代器[begin,end)的内容,无返回值。
4.删除数据
deq.pop_back()
删除最后一个数据
deq.pop_front()
删除第一个数据
deq.erase(it)
删除迭代器it所指的数据,返回下一个数据的迭代器。
deq.erase(begin,end)
删除迭代器[begin,end)之间的数据,返回下一个数据的迭代器。
5.其他操作
deq.empty()
判断容器是否为空,若空,返回true,否则返回false。
deq.max_size()
返回队列最大容量
deq.resize()
重新指定队列的容量
deq.size()
返回队列中数据的数量
deq.swap(deq2)
将两队列中元素互换。
deque列子:
#include <iostream>
#include <deque>
using std::deque;
int main()
{
deque<int> deq(10);
for (unsigned i = 0; i < 10; ++i)
{
deq[i] = i*i;
}
std::cout << "deque中的数据:\n";
for (deque<int>::const_iterator it = deq.cbegin(); it != deq.cend(); ++it)
{
std::cout << *it << " ";
}
std::cout << "\n\n";
std::cout << "deque在头尾添加数据:\n";
deq.push_front(123);
deq.push_back(321);
for (deque<int>::const_iterator it = deq.cbegin(); it != deq.cend(); ++it)
{
std::cout << *it << " ";
}
std::cout << "\n\n";
std::cout << "deque查找数据:\n";
deque<int>::iterator f=find(deq.begin(), deq.end(), 123);
if (f != deq.end())
std::cout << "123 在队列中.\n";
else
std::cout << "123 不在队列中.\n";
std::cout << "\n";
std::cout << "deque删除头尾数据:\n";
deq.pop_front();
deq.pop_back();
for (deque<int>::const_iterator it = deq.cbegin(); it != deq.cend(); ++it)
{
std::cout << *it << " ";
}
std::cout << "\n\n";
std::cout << "deque删除某个数据:\n";
deq.erase(deq.begin() + 1);
for (deque<int>::const_iterator it = deq.cbegin(); it != deq.cend(); ++it)
{
std::cout << *it << " ";
}
std::cout << "\n\n";
std::cout << "deque删除一个区间数据:\n";
deq.erase(deq.begin() + 1,deq.begin()+5);
for (deque<int>::const_iterator it = deq.cbegin(); it != deq.cend(); ++it)
{
std::cout << *it << " ";
}
system("pause");
return 0;
}