来让我们看看这里有些什么!
这里存放的是elc的库所达到的成就,包括和stl一起跑benchmark或者对rand进行testu01的测试
在这里你可以轻松的找到“某个elc的东西在某个测试中的表现如何”以及相关的代码链接
我想以后这里的东西会越来越多
elc的rand定义在elc/base_defs
,点击这里查看具体的实现
与std::rand
和std::mt19937
相比,elc的rand有更多的优点:
- 速度更快
- 更好的随机性(通过了
std
中的rand
和mt19937
未能通过的testu01测试) - 更好的可移植性(在不同的平台上都能保证同一种子下随机出一致的结果,而
std::rand
不行) - 泛型支持(可以用于任何平凡构造的类型)
- 比
std::rand
更长的周期以及比std::mt19937
更小的状态,一切都刚刚好够用
elc的string定义在elc/string
,点击这里查看具体的实现
与std::string
相比,elc的string有更多的优点:
- copy-on-write
- 更小的空间占用
- 更快的头插速度
- 更多的接口(包括但不限于查看当前内存占用、预先分配一段内存、
pop_fount
等等) - 更好的编译期常量支持
- 近乎常数时间的
substr
、hash
、operator==
、定长构造等 - 其他elc函数的支持(比如不同于
std::to_string
的可以进行无损来回转换的elc::to_string
等)
与std::string
一同benchmark的结果点此查看
在在线编译中使用elc::string的示例
需要注意的是,在上面的在线编译示例中目前有两个小问题,一个是编译器的ice(会导致程序崩溃),而另一个是STL的实现问题(导致编译中警告)
编译器ice绝赞调查中,详见此处
STL的实现问题已经在microsoft/STL#3246被修复,等待下一版本的更新即可
elc的io定义在elc/stream
,由于实现较为分散,所以这里只给出base_stream
的实现链接,点此查看
与std
中的io相比,elc的io有更多的优点:
- 指针输出包含更详细的信息(包括指针指向的类型名称和指针的值)
- 作为utf32的
elc::char_t
原生支持 - 得益于
elc::to_string
,无损并且高精度的算数类型转换 - 更为完善的输出逻辑(比如对于非
true
也非false
的bool
值,相比std
的大部分实现而言,elc的输出会是other(值内容)
,而不是true
)