是否有像“std::array<type, max_size>”这样的结构,其“正在使用”的大小可以小于 max_size?

Is there a structure like `std::array<type, max_size>` where its "in use" size can be smaller than max_size?

提问人:user3257842 提问时间:3/24/2022 更新时间:3/24/2022 访问量:51

问:

我有一个问题,我使用加法、减法和乘以大量的双精度向量()。每个向量可以有 2 到 8 个元素,向量的元素数可以根据操作而变化,但永远不会超过 8 个。std:vector<double>

要做到这一点,最快速有效的方法是使用诸如 or 之类的类型。但是,我仍然需要一个单独的变量来跟踪向量实际使用的 8 个预分配插槽中的多少个。即。如果 ,则我们认为向量与其余向量一样被忽略,直到某些操作发生变化。double my_vector[8]std::array<double, 8> my_vectorint my_vector_sizemy_vector_size = 2{my_vector[0],my_vector[1]}my_vector_size

下一步是分组并形成一个单一的结构。但我想知道是否已经有一个适合我要求的结构。double my_vector[max_size]int my_vector_sizestd

C++ 数组向 std

评论

1赞 JaMiT 3/24/2022
您是仅限于标准库(又名),还是会考虑第三方库std
1赞 Anon Mail 3/24/2022
您可以使用保留八个元素空间的 std::vector 吗?这样一来,大小就是你放入其中的任何东西,但有八个元素的空间,而不必重新分配内存。
0赞 user3257842 3/24/2022
@Anon Mail 对于我正在做的运算类型(加法、减法、乘法或除以常数),直观地说,具有数组结构的东西似乎是最快的(不需要插入或删除。此外,由于向量移动很多,它减少了所需的分配数量)。我还没有测试过使用 reserve .也许它会提高性能。@JaMiT这些看起来确实很有趣,但不幸的是,我对他们允许我们使用的库有些限制。
1赞 JaMiT 3/24/2022
@user3257842 您应该将回复分成单独的评论。“在评论中回复”功能仅支持每条评论一个回复。我相信当 和 用户名之间有空格时,它也无法正常工作。有关详细信息,请参阅帮助中心@
1赞 Drew Dormann 3/24/2022
A 使用 std::p mr::monotonic_buffer_resource 既可以实现此处请求的功能,又可以实现此处请求的免费商店分配,但从上下文线索来看,这感觉像是过早的优化。“向量四处移动很多”并不能描述当使用量在容量范围内时会发生什么情况,并且比使用量超过容量时要正确得多。std::vectorstd::vectorstd::array

答: 暂无答案