运行时灵活快速的容器

时间:2014-11-26 12:03:30

标签: c++ stl

我需要像std::array这样的固定大小(快速)容器来存储像这样的用户输入

用户输入:

n = {2,3,2,1}

生成的输出(在运行时):

m = {{2x3},{3x2},{2x1}}

如何存档m的快速访问权限?正常std::vector似乎太慢了。

2 个答案:

答案 0 :(得分:2)

由于您明确要求固定尺寸​​std::array确实是您想要的。虽然大小是常量,但内容不是,所以你可以将用户输入写入std::array就好了。

然而,不确定您想要的是应该想要的。将用户输入提供到固定大小的容器是一个非常糟糕的想法,向量的有效额外开销是一个内存分配(和一个自由操作),这对于在程序启动时只发生一次的事情几乎不重要。 std::vector对于初始分配来说意味着一个可忽略的,可笑的小额外开销,但它保证无论用户提交多少数据,你总是可以在没有缓冲区溢出的情况下推送它。对于非常可接受的成本来说,这是一件大事。

访问std::arraystd::vector中的元素的速度与使用operator[]at成员函数检查边界!)时的速度一样快,并且提供了你不能在调试模式下编译,也不能用"内存清理器"选项,例如LLVM提供。

调试模式和清理程序功能显然确实增加了开销,但这对你要发布的发布二进制文件来说是无关紧要的,毕竟它是你要求的,太

此外,像"这样的陈述似乎很慢" 几乎可以保证给你带来负面回应。永远不要猜测可能慢慢(测量,不要猜),并且不要过早地做到这一点。

答案 1 :(得分:0)

std :: vector似乎是因为它基于数组。考虑两件事:

  • 使用[]访问而不是at()(但一定要提供正确的索引);
  • 使用vec.resize(expectedSize)准备载体以减少(或完全排除)调整开销的大小。