fun()const->Iterator

先看一个函数定义如下:

template <typename T>
auto Blocker<T>::ObservedEnd() const -> Iterator {
  return observed_msg_queue_.end();
}

1 迭代器:Iterator

2 C++ auto 返回类型推导:-> Iterator

3 函数体限定不能修改成员:const

常用迭代器:

iterator
const_iterator
reverse_iterator 
const_reverse_iterator

迭代器常用方法:

begin():    返回指向vector第一个元素的迭代器。
end():      返回指向vector最后一个元素的下一个位置的迭代器。
rbegin():   返回指向vector最后一个元素的迭代器,用于逆向遍历。
rend():     返回指向vector第一个元素前一个位置的逆向迭代器,用于逆向遍历的结束位置。
cbegin():   与begin()类似,返回指向vector第一个元素的const迭代器,不允许修改元素。
cend():     与end()类似,返回指向vector最后一个元素的下一个位置的const迭代器,不允许修改元素。
crbegin():  与rbegin()类似,返回指向vector最后一个元素的const逆向迭代器,逆向不可修改。
crend():    与rend()类似,返回指向vector第一个元素前一个位置的const逆向迭代器,逆向不可修改。

例子:

#include <iostream>  
#include <unordered_map>  
#include <vector>  
#include <string>  

using Iterator = typename std::vector<int>::iterator;
std::vector<int> v = {1, 2, 3, 4, 5};  

auto testRet()->Iterator{
    return v.begin();
}

int main() {  
    for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {  
        *it = *it + 1;
        std::cout << *it << ' ';  
    }  
    std::cout << std::endl;  

    for (std::vector<int>::iterator it = testRet(); it != v.end(); ++it) {  
        *it = *it + 1;
        std::cout << *it << ' ';  
    }  

    std::cout << std::endl;  
    for (std::vector<int>::const_iterator it = v.cbegin(); it != v.cend(); ++it) {  
        std::cout << *it << ' ';  
    }  
    std::cout << std::endl;  
    return 0;  
}

参考文档:

Iterator library - cppreference.com

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值