我需要像std::array
这样的固定大小(快速)容器来存储像这样的用户输入
用户输入:
n = {2,3,2,1}
生成的输出(在运行时):
m = {{2x3},{3x2},{2x1}}
如何存档m
的快速访问权限?正常std::vector
似乎太慢了。
答案 0 :(得分:2)
由于您明确要求固定尺寸,std::array
确实是您想要的。虽然大小是常量,但内容不是,所以你可以将用户输入写入std::array
就好了。
然而,不确定您想要的是应该想要的。将用户输入提供到固定大小的容器是一个非常糟糕的想法,向量的有效额外开销是一个内存分配(和一个自由操作),这对于在程序启动时只发生一次的事情几乎不重要。
std::vector
对于初始分配来说意味着一个可忽略的,可笑的小额外开销,但它保证无论用户提交多少数据,你总是可以在没有缓冲区溢出的情况下推送它。对于非常可接受的成本来说,这是一件大事。
访问std::array
和std::vector
中的元素的速度与使用operator[]
(at
成员函数检查边界!)时的速度一样快,并且提供了你不能在调试模式下编译,也不能用"内存清理器"选项,例如LLVM提供。
调试模式和清理程序功能显然确实增加了开销,但这对你要发布的发布二进制文件来说是无关紧要的,毕竟它是你要求的,太
此外,像"这样的陈述似乎很慢" 几乎可以保证给你带来负面回应。永远不要猜测可能慢慢(测量,不要猜),并且不要过早地做到这一点。
答案 1 :(得分:0)
std :: vector似乎是因为它基于数组。考虑两件事: