C++STL之deque的使用

参考别人的哈,特此声明。

#include 
/* deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似 deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针, 指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据。 因此deque在随机访问和遍历数据会比vector慢。具体的deque实现可以参考《STL源码剖析》, 当然此书中使用的SGI STL与VS2008所使用的PJ STL的实现方法还是有区别的。 Deque成员函数 函数 描述 c.assign(beg,end)将[beg; end)区间中的数据赋值给c。 c.assign(n,elem) 将n个elem的拷贝赋值给c。 c.at(idx) 传回索引idx所指的数据,如果idx越界,抛出out_of_range。 c.back() 传回最后一个数据,不检查这个数据是否存在。 c.begin() 传回迭代器重的可一个数据。 c.clear() 移除容器中所有数据。 deque c 创建一个空的deque。 deque c1(c2) 复制一个deque。 Deque c(n) 创建一个deque,含有n个数据,数据均已缺省构造产生。 Deque c(n, elem) 创建一个含有n个elem拷贝的deque。 Deque c(beg,end) 创建一个以[beg;end)区间的deque。 c.~deque() 销毁所有数据,释放内存。 c.empty() 判断容器是否为空。 c.end() 指向迭代器中的最后一个数据地址。 c.erase(pos) 删除pos位置的数据,传回下一个数据的位置。 c.erase(beg,end) 删除[beg,end)区间的数据,传回下一个数据的位置。 c.front() 传回地一个数据。 get_allocator 使用构造函数返回一个拷贝。 c.insert(pos,elem) 在pos位置插入一个elem拷贝,传回新数据位置。 c.insert(pos,n,elem) 在pos位置插入>n个elem数据。无返回值。 c.insert(pos,beg,end) 在pos位置插入在[beg,end)区间的数据。无返回值。 c.max_size() 返回容器中最大数据的数量。 c.pop_back() 删除最后一个数据。 c.pop_front() 删除头部数据。 c.push_back(elem) 在尾部加入一个数据。 c.push_front(elem) 在头部插入一个数据。 c.rbegin() 传回一个逆向队列的第一个数据。 c.rend() 传回一个逆向队列的最后一个数据的下一个位置。 c.resize(num) 重新指定队列的长度。 c.size() 返回容器中实际数据的个数。 C1.swap(c2) Swap(c1,c2) 将c1和c2元素互换。 同上操作。 */

//双向队列 deque
//by MoreWindows http://blog.csdn.net/morewindows
#include 
#include 
#include 
using namespace std;
int main()
{
    deque<int> ideq(20); //Create a deque ideq with 20 elements of default value 0
    deque<int>::iterator pos;
    int i;

    //使用assign()赋值 assign在计算机中就是赋值的意思
    for (i = 0; i < 20; ++i)
        ideq[i] = i;

    //输出deque
    printf("输出deque中数据:\n");
    for (i = 0; i < 20; ++i)
        printf("%d ", ideq[i]);
    putchar('\n');

    //在头尾加入新数据
    printf("\n在头尾加入新数据...\n");
    ideq.push_back(100);
    ideq.push_front(i);

    //输出deque
    printf("\n输出deque中数据:\n");
    for (pos = ideq.begin(); pos != ideq.end(); pos++)
        printf("%d ", *pos);
    putchar('\n');

    //查找
    const int FINDNUMBER = 19;
    printf("\n查找%d\n", FINDNUMBER);
    pos = find(ideq.begin(), ideq.end(), FINDNUMBER);
    if (pos != ideq.end())
        printf("find %d success\n", *pos);
    else
        printf("find failed\n");

    //在头尾删除数据
    printf("\n在头尾删除数据...\n");
    ideq.pop_back();
    ideq.pop_front();

    //输出deque
    printf("\n输出deque中数据:\n");
    for (pos = ideq.begin(); pos != ideq.end(); pos++)
        printf("%d ", *pos);
    putchar('\n');

    system("pause");
    return 0;
}















你可能感兴趣的:(STL)