gpt4 book ai didi

c++ - 除了使用 vector 或 new 之外,还有其他方法可以创建动态大小的数组吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:10 24 4
gpt4 key购买 nike

我正在尝试创建一个 std::strings 数组,其长度等于从文件中读取的值(从 1 到大约 300 之间的任意位置)。我基本上希望它像

std::string arr[n];

但是,我知道这不是有效的 C++ 代码。我知道有两种选择: vector 和新运算符。还有吗?

我希望找到比这两种方法中的任何一种都更快的方法。

最佳答案

如果您现在确定最大大小,最快的方法肯定是分配一个固定大小的数组。

在任何其他情况下,您必须使用 new 或容器。没有别的办法。使用容器当然更方便有效:

  • vector是一种可能。直接访问任何内容都非常快元素,因为元素是连续存储的,就像在数组中一样。

  • list是另一个容器。它专为顺序访问而设计,并且不会因尺寸增大而受到影响。你可以添加一个元素无需移动其所有随从。

如您所见,“慢”和“快”取决于您执行的操作。

可以显着减慢 vector 填充速度的是结构增长时需要重新分配。减少此问题的一种做法是 reserve()一大块元素的空间:

  • 例如,如果符合预期大小,您可以一次保留 300 个元素。
  • 每次添加新元素时, vector 的 vector 大小都会根据需要增加。只要预留空间足够,就没有开销。如果到达分配空间的末尾, vector 将通过重新分配继续动态增长。

关于c++ - 除了使用 vector 或 new 之外,还有其他方法可以创建动态大小的数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33379493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com