C++ - 顺序性容器(vector、list、deque)

顺序性容器用来维护一组排列有序、类型相同的元素。

一、vector:

vector内的每个元素都被储存在距离其实点的固定偏移位置上。

#include <vector>

1.1 创建新容器

	vector<int> ivec01;
    vector<int> ivec02(10);
    // 产生特定大小的容器,并为每个元素指定初值。
    vector<int> ivec03(10, -1);
    // 通过一对iterator产生容器。
    int ia[8] = {1, 1, 2, 3, 5, 8, 13, 21};
    vector<int> ivec04(ia, ia + 8);

二、list:

list以双向链接(double-linked)而非连续内存来存储内容,因此可以执行前进或后退操作。
(list中的每个元素都包含三个字段:value、back指针(指向前一元素)、front指针(指向下一元素))

#include <list>

2.1 创建新容器

    list<string> slist01;
    list<string> slist02(16);
    // 产生特定大小的容器,并为每个元素指定初值。
    list<string> slist03(16, "unassigned");
    // 根据某个容器产生出新容器。复制原容器内的元素,作为新容器的初值。
    list<string> slist04(slist03);

2.3 通用插入函数insert

    // iterator insert( iterator position, elemType value )
    // 将value插入position之前,并会返回一个iterator,指向被插入的元素。
    list<int> ilist = {1, 2, 3, 4, 5, 6, 7, 8};

    list<int>::iterator it = ilist.begin();
    while (it != ilist.end())
    {
        if (*it >= 5)
        {
            ilist.insert(it, 5);
            break;
        }
        ++it; // list类型只能单步加
    }
    if (it == ilist.end())
        ilist.push_back(ival);

    for (it = ilist.begin(); it != ilist.end(); ++it)
        cout << *it << " ";
    cout << endl;

    // void insert( iterator position, int count, elemType value )
    // 可在position之前插入count个元素,这些元素的值都和value相同。
    ilist.insert(ilist.begin(), 4, -1);

    for (it = ilist.begin(); it != ilist.end(); ++it)
        cout << *it << " ";
    cout << endl;

    // void insert( iterator1 position, iterator2 first, iterator2 end )
    // 可在position之前插入[first, last)所标示的各个元素
    int ia1[7] = {1, 1, 2, 3, 5, 55, 89};
    int ia2[4] = {8, 13, 21, 34};
    list<int> elems(ia1, ia1+7);
    list<int>::iterator iter = elems.begin();
    for(; iter != elems.end() && *iter != 55; ++iter);
    elems.insert(iter, ia2, ia2+4);

    for (iter = elems.begin(); iter != elems.end(); ++iter)
        cout << *iter << " ";
    cout << endl;

2.4 通用删除函数erase

    // iterator erase( iterator position )
    // 删除position所指的元素
    for (iter = elems.begin(); iter != elems.end() && *iter != 55; ++iter);

    elems.erase(iter);

    for (iter = elems.begin(); iter != elems.end(); ++iter)
        cout << *iter << " ";
    cout << endl;

    // iterator erase( iterator first, iterator last )
    // 删除[first,last)范围内的元素
    list<int>::iterator first = ilist.begin(), last = ilist.end();
    for (first = elems.begin(); first != elems.end() && *first != 2; ++first);
    for (last = elems.begin(); last != elems.end() && *last != 8; ++last);

    ilist.erase(first, last);

    for (iter = elems.begin(); iter != elems.end(); ++iter)
        cout << *iter << " ";
    cout << endl;

三、deque:

#include <deque>

deque的行为和vector颇为类似,都以连续内存存储元素。但deque对于前后端元素的插入和删除操作效率更高,是queue的底部存储元素。

3.2 插入、读取、删除

    deque<int> a_line;
    int ival = -1;

    // 将ival插入a_line前端
    a_line.push_front(ival);
    // 读取a_line最前端元素的值
    int front_value = a_line.front();
    // 删去a_line最前端元素
    a_line.pop_front();
    
    // 将ival插入a_line后端
    a_line.push_back(ival);
    // 读取a_line最后端元素的值
    int back_value = a_line.back();
    // 删去a_line最前端元素
    a_line.pop_back();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值