我浏览了虚幻引擎源代码,发现它们使用自己的容器类,例如内部动态数组。但是 C++ STL 提供了(几乎)所有必需的容器类。那么他们为什么要花时间再次开发相同的容器呢?对于开发人员来说,使用容器std::vector来编写他们的代码而不是试图弄清楚如何使用TArray引擎中的类来做事情不是更容易吗?
我知道,std::string并且std::wstring来自相同的基本类型std::basic_string<>。但是没有一种“官方”的方法可以将std::string数据转换为std::wstring使用 C++ STL?我的意思是 Windows 提供MultiByteToWideChar()转换,但为什么 STL 不能提供转换?
我std::codecvt以前用来完成它,但现在它说它已被弃用。为什么 STL 首先删除这个支持?
提前致谢。
背景
我正在构建一个注重性能的应用程序,但我遇到了一个必须使用std::set. 它就像一个魅力。但后来我开始阅读文档(你可以在这里找到),我注意到的第一件事是
搜索、移除和插入操作具有对数复杂度。集合通常被实现为红黑树。
搜索、删除和插入对我来说非常有意义,因为它们使用某种树结构(因为文档不保证它使用Red-Black Tree)。但问题是,他们为什么要这样做?
我std::set为我自己的解决方案做了一个替代解决方案,它使用 astd::vector来存储所有条目。然后我执行了一些基本的基准测试,这是结果,
Iterations: 100000
// Insertion
VectorSet : 211464us
std::set : 1272864us
// Find/ Lookup
VectorSet : 404264us
std::set : 551464us
// Removal
VectorSet : 254321964us
std::set : 834664us
// Traversal (iterating through all the elements (100000 elements; 100000 iterations)
VectorSet : 2464us
std::set : 4374174264us
Run Code Online (Sandbox Code Playgroud)
根据这些结果,我的实现 ( VectorSet)std::set在插入和查找方面都表现出色,遍历次数超过 1800000 次。但是明显std::set优于我的实现VectorSet(这是可以理解的,因为我们正在处理向量)。
我可以证明为什么删除速度较慢VectorSet但速度较快,std::set …