小编D-R*_*RAJ的帖子

为什么像虚幻引擎这样的大项目要自己写容器类?

我浏览了虚幻引擎源代码,发现它们使用自己的容器类,例如内部动态数组。但是 C++ STL 提供了(几乎)所有必需的容器类。那么他们为什么要花时间再次开发相同的容器呢?对于开发人员来说,使用容器std::vector来编写他们的代码而不是试图弄清楚如何使用TArray引擎中的类来做事情不是更容易吗?

c++ game-engine c++-standard-library

16
推荐指数
2
解决办法
1051
查看次数

为什么 STL 不“正式”支持 std::string 到 std::wstring 的转换?

我知道,std::string并且std::wstring来自相同的基本类型std::basic_string<>。但是没有一种“官方”的方法可以将std::string数据转换为std::wstring使用 C++ STL?我的意思是 Windows 提供MultiByteToWideChar()转换,但为什么 STL 不能提供转换?

std::codecvt以前用来完成它,但现在它说它已被弃用。为什么 STL 首先删除这个支持?

提前致谢。

c++ string

2
推荐指数
1
解决办法
76
查看次数

为什么 C++ STL 没有实现更高效的 std::set 实现?

背景
我正在构建一个注重性能的应用程序,但我遇到了一个必须使用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 …

c++ performance vector set

2
推荐指数
1
解决办法
74
查看次数