V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
toukayasan
V2EX  ›  分享创造

写了一个简单的迭代器包装库

  •  
  •   toukayasan · 74 天前 · 1325 次点击
    这是一个创建于 74 天前的主题,其中的信息可能已经有所发展或是发生改变。

    仓库地址: https://github.com/Toukaya/TABIYA

    一个非常简单的玩具库。 我是一位现代 C++的伪爱好者(雾,某天在写 python 作业的时候,突发奇想,想用 concept 写一个鸭子类型的迭代器,即,满足迭代器的抽象概念,那么就可以是迭代器。那么一个迭代器需要满足些什么,个人认为一个单向迭代器( forward_iterator )会满足三个要求:

    1. 一个单向的用于迭代的操作器 Incrementor ;
    2. 一个解引用操作器 Dereferencer ;
    3. 一个用于判断时候到达边界的比较器 EqualityComparator ;

    在这些概念下,可以得到,一个标准库迭代器,肯定是一个迭代器;一个指向数组开头的指针,也可以是一个“迭代器”;然后就写出来了一个简单的 IterWrapper 类。

    使用 IterWrapper ,又写了一个简单的 Range 类,其来自于 python 的语法糖(可能不是,记忆不清了),这样使用:

    tabiya::Range<int> range;
    range.from(1).to(5);
    std::vector<int> values;
    for (auto value : range.from(1).to(5)) {
    	values.push_back(val); // => {1, 2, 3, 4}
    }
    

    很简单的功能,满足迭代器 concepts 的类型应该都能使用。

    然后写了一个 Times 类,也是来自 python 的语法糖:

    std::vector<int> values;
    for (auto value : tabiya::Times(5)) {
    	values.push_back(val); // => {0, 1, 2, 3, 4}
    }
    

    就是一个这样功能很简单的库。 但是实际上由于我只是一个伪爱好者,能力有限也做不到写出一个很完善的库,去年 7 月份创建的仓库,断断续续直到今天才勉强实现完基本的功能,本身写 C++的抽象库就够难,抽象的抽象(指迭代器的抽象)更是( C++太难力)。 这个库肯定有许多不完善的地方(测试来自 AI ,只能说大体的功能实现了并测试了)。 发帖虽说是想与各位 v 友探讨进步,但是代码很抽象还是不指望能阅读源码了,各位佬纯当看个乐罢,如果能有指点,我会很高兴。

    2 条回复    2025-05-03 23:03:03 +08:00
    buf1024
        1
    buf1024  
       74 天前 via Android
    估计绝大部分连看一眼的兴趣都没有,更不用说乐子了。
    toukayasan
        2
    toukayasan  
    OP
       74 天前
    @buf1024 哎,合理。本身也是一个无聊功能的玩具库
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1304 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:49 · PVG 07:49 · LAX 16:49 · JFK 19:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.