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

137 天前
 toukayasan

仓库地址: 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 友探讨进步,但是代码很抽象还是不指望能阅读源码了,各位佬纯当看个乐罢,如果能有指点,我会很高兴。

1420 次点击
所在节点    分享创造
2 条回复
buf1024
137 天前
估计绝大部分连看一眼的兴趣都没有,更不用说乐子了。
toukayasan
137 天前
@buf1024 哎,合理。本身也是一个无聊功能的玩具库

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1129549

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX