一、前言

deque 容器迭代器的类型为随机访问迭代器。

二、deque支持的迭代器成员函数

函数功能
begin()返回指向容器中第一个元素的正向迭代器;如果是 const 类型容器,在该函数返回的是常量正向迭代器
end()返回指向容器最后一个元素之后一个位置的正向迭代器;如果是 const 类型容器,在该函数返回的是常量正向迭代器。此函数通常和 begin() 搭配使用
rbegin()返回指向最后一个元素的反向迭代器;如果是 const 类型容器,在该函数返回的是常量反向迭代器
rend()返回指向第一个元素之前一个位置的反向迭代器。如果是 const 类型容器,在该函数返回的是常量反向迭代器。此函数通常和 rbegin() 搭配使用
cbegin()和 begin() 功能类似,只不过其返回的迭代器类型为常量正向迭代器,不能用于修改元素
cend()和 end() 功能相同,只不过其返回的迭代器类型为常量正向迭代器,不能用于修改元素
crbegin()和 rbegin() 功能相同,只不过其返回的迭代器类型为常量反向迭代器,不能用于修改元素
crend()和 rend() 功能相同,只不过其返回的迭代器类型为常量反向迭代器,不能用于修改元素

函数的具体功能和array、vector的类似,这里不再详细说明。stl支持全局的begin()和end()函数。

三、基本用法

1、begin()和end()

begin() 和 end() 分别用于指向「首元素」和「尾元素+1」 的位置

2、cbegin()和cend()

和 begin()/end() 唯一不同的是:cbegin()/cend() 成员函数返回的是 const 类型的正向迭代器,这样可以用来遍历容器内的元素,也可以访问元素,但是不能对所存储的元素进行修改

3、rbegin()和rend()

分别表示指向最后一个元素和第一个元素前一个位置的随机访问迭代器,又常称为反向迭代器。
crbegin()/crend() 组合和 rbegin()/crend() 组合唯一的区别在于:前者返回的迭代器为 const 类型迭代器,不能用来修改容器中的元素,除此之外在使用上和后者完全相同。

四、注意事项

1、迭代器的功能是遍历容器,在遍历的同时可以访问(甚至修改)容器中的元素,但迭代器不能用来初始化空的 deque 容器。
2、对于空的 deque 容器来说,可以通过 push_back()、push_front() 或者 resize() 成员函数实现向(空)deque 容器中添加元素。
3、当向 deque 容器添加元素时,deque 容器会申请更多的内存空间,同时其包含的所有元素可能会被复制或移动到新的内存地址(原来占用的内存会释放),这会导致之前创建的迭代器失效。和vector类似。

五、实例

 //全局begin和end
    i = 0;
    for (dequeIter = begin(dequeInt); dequeIter < end(dequeInt); dequeIter++)
    {
        std::cout << "global begin and end dequeInt[" << i << "]=" << *dequeIter << std::endl;
    }

    //cbegin/cend
    i = 0;
    std::deque<int>::const_iterator dequeIterC = dequeInt.cbegin();
    for (; dequeIterC != dequeInt.cend(); dequeIterC++)
    {
        std::cout << "cbegin and cend dequeInt[" << i << "]=" << *dequeIterC << std::endl;
    }

    //rbegin/rend
    i = 0;
    std::deque<int>::reverse_iterator dequeIterR = dequeInt.rbegin();
    for (; dequeIterR != dequeInt.rend(); dequeIterR++)
    {
        std::cout << "rbegin and rend dequeInt[" << i << "]=" << *dequeIterR << std::endl;
    }

    //crbegin/crend
    i = 0;
    std::deque<int>::const_reverse_iterator dequeIterCR = dequeInt.crbegin();
    for (; dequeIterCR != dequeInt.rend(); dequeIterCR++)
    {
        std::cout << "crbegin and crend dequeInt[" << i << "]=" << *dequeIterCR << std::endl;
    }

结果如下:
image.png


等待樱花盛开
1 声望0 粉丝

小菜鸟一枚,望各位大佬不吝指教,用于记录学习