gpt4 book ai didi

c++ - 将数组修剪为 i 和 j 之间的元素

转载 作者:行者123 更新时间:2023-11-30 05:26:33 31 4
gpt4 key购买 nike

一个经典,我在这里寻找优化:我有一个数组,经过一些处理我知道我只对元素 i 到 j 感兴趣。如何以最轻的方式在 fatset 中修剪我的数组,完全删除/释放 i 之前和 j 之后的元素的内存?

我正在做嵌入式 C++,所以我可能无法编译各种类库。但 std 或 vector 事物在第一阶段受到欢迎!

我已经尝试过,要在 i 和 j 之间修剪数组 A,变量 numElms 告诉我 A 中的元素数量:

A = &A[i];
numElms = i-j+1;

因为它会产生不兼容错误。可以修复吗?即使修复了,是否会为现在未使用的元素释放内存?

一些上下文:这个数组是我模块的中央数据集,它可能很重。只要模块存在,它就会存在。并且一直不需要负重。这是要做的第一件事——确定必须分析数据集的哪一部分,并永远修剪和丢弃其余部分,永远不要再使用它(直到下一个周期,我们可能会得到一个新数组完全不同的尺寸)。

最佳答案

当询问有关速度的问题时,您的速度可能取决于您正在使用的阵列的大小,但是:

最快的方法是修剪数组,只需使用A[index + i]找到你想要的元素。

最轻的方法是:

  1. malloc分配一个动态数组
  2. 一次ij找到将该范围复制到动态数组的头部
  3. 使用realloc将动态数组的大小调整为 j - i + 1 的大小

但是您将此标记为 C++ 而不是 C,因此我相信您也对可读性和所需的编程投资感兴趣,而不是原始速度或重量。如果这是真的,那么我建议使用 vectordeque .

给定vector<thing> Adeque<thing> A你可以这样做:

A.erase(cbegin(A), next(cbegin(A), i));
A.resize(j - i + 1);

关于c++ - 将数组修剪为 i 和 j 之间的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37725229/

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