【发布时间】:2021-05-03 16:01:44
【问题描述】:
我一直在研究元胞自动机,我选择实现它们的方式是创建一个二维单元格向量,其中每个单元格最初都是整数向量本身(因为我希望每个单元格存储多个值),后来我将其更改为短无符号整数,然后更改为字符,因为我意识到最小的数据类型足以满足我的需求......
我目前正在寻找提高性能的方法,这让我想到,如果我用字符串替换字符向量会更好吗?
知道整个矩阵始终具有固定大小,这意味着 2D 网格的大小以及每个单元格的大小都是从一开始就分配的,并且在程序运行期间保持不变:
哪个访问速度更快?调整?复制?或者执行一般操作?
另外,我知道我说过所有东西都有固定的大小,但只是为了将来参考,根据我对向量的表面知识,每次你 push_back() 一个新元素时都必须重新分配一个向量,字符串是这样的吗?
【问题讨论】:
-
当您想知道哪个更快时需要测量。
-
如果大小是固定的并且在编译时已知,请考虑使用
std::array而不是vector。 -
vector 可能会更快,因为它不像字符串那样执行 SSO。不过,您确实应该首先进行基准测试。在没有事实的情况下做出绩效决策是灾难的根源。
-
没有一般的答案。如果没有真实的用例,很难设置现实的基准来知道哪个性能更好。您很幸运,您已经有一个可以工作的应用程序,您可以用另一个替换一个,看看哪个性能更好。
-
回复:“每次 push_back() 都必须重新分配向量”——这是不正确的。 vector 通常会分配一些额外的空间,当您向后推时,您将插入该空间。
标签: c++ string optimization vector cellular-automata