命名空间
变体
操作

std::counted_iterator

来自 cppreference.cn
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
工具
迭代器适配器
 
 
定义于头文件 <iterator>
template< std::input_or_output_iterator I >
class counted_iterator;
(C++20 起)

std::counted_iterator 是一个迭代器适配器,其行为与底层迭代器完全相同,不同之处在于它跟踪到其范围末尾的距离。当且仅当其计数达到零时,此迭代器等于 std::default_sentinel

目录

[编辑] 成员类型

成员类型 定义
iterator_type I
value_type
(有条件存在)
std::iter_value_t<I> 如果 I 建模 indirectly_readable;否则,未定义
difference_type std::iter_difference_t<I>
iterator_concept
(有条件存在)
I::iterator_concept 如果存在;否则,未定义
iterator_category
(有条件存在)
I::iterator_category 如果存在;否则,未定义

[编辑] 成员对象

成员名称 (Member name) 定义
current (私有) base() 访问的底层迭代器
(仅用于阐释的成员对象*)
length (私有) 底层迭代器与其范围末尾之间的距离
(仅用于阐释的成员对象*)

[编辑] 成员函数

构造新的 counted_iterator
(公共成员函数) [编辑]
赋值另一个 counted_iterator
(公共成员函数) [编辑]
访问底层迭代器
(公共成员函数) [编辑]
返回到末尾的距离
(公共成员函数) [编辑]
访问指向的元素
(公共成员函数) [编辑]
通过索引访问元素
(公共成员函数) [编辑]
递增或递减 counted_iterator
(公共成员函数) [编辑]

[编辑] 非成员函数

比较到末尾的距离
(函数模板) [编辑]
检查到末尾的距离是否等于 0
(函数模板) [编辑]
(C++20)
前进迭代器
(函数模板) [编辑]
(C++20)
计算两个迭代器适配器之间的距离
(函数模板) [编辑]
计算到末尾的带符号距离
(函数模板) [编辑]
(C++20)
将底层迭代器解引用的结果转换为其关联的右值引用类型
(函数) [编辑]
(C++20)
交换两个底层迭代器指向的对象
(函数模板) [编辑]

[编辑] 辅助类

std::counted_iterator 类型的属性提供统一接口
(类模板特化) [编辑]

[编辑] 示例

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
 
using std::operator""s;
 
void print(auto const remark, auto const& v)
{
    const auto size = std::ssize(v);
    std::cout << remark << '[' << size << "] { ";
    for (auto it = std::counted_iterator{std::cbegin(v), size};
         it != std::default_sentinel; ++it)
        std::cout << *it << (it.count() > 1 ? ", " : " ");
    std::cout << "}\n";
}
 
int main()
{
    const auto src = {"Arcturus"s, "Betelgeuse"s, "Canopus"s, "Deneb"s, "Elnath"s};
    print("src", src);
    std::vector<decltype(src)::value_type> dst;
    std::ranges::copy(std::counted_iterator{src.begin(), 3},
                      std::default_sentinel,
                      std::back_inserter(dst));
    print("dst", dst);
}

输出

src[5] { Arcturus, Betelgeuse, Canopus, Deneb, Elnath }
dst[3] { Arcturus, Betelgeuse, Canopus }

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
P2259R1 C++20 未提供成员 typedef std::incrementable_traits
专门用于 counted_iterator
添加成员 typedef 以解决 iterator_traits 修复
删除冗余的 std::incrementable_traits 特化

[编辑] 另请参阅

用于知道其范围边界的迭代器的默认哨兵
(类) [编辑]
从迭代器和计数创建子范围
(定制点对象)[编辑]
由另一个view的前N个元素组成的view
(类模板) (范围适配器对象)[编辑]