将原始数据封装在类似std容器的数组中,具有运行时大小

Wrap raw data in std container like array, with runtime size

本文关键字:数组 运行时 数据封装 原始 std      更新时间:2023-10-16

有没有像std::array这样固定大小的std容器,但大小不是编译时,而是运行时?

我想把我存储在std::array中的一些数据的一部分传递给std::acculumate和类似的函数。我不想使用std::vector(在嵌入式平台上工作),因此我正在寻找介于两者之间的东西。

假设代码是这样的,我想要的是用一些东西来代替array_part:

#include <array>
#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
int main()
{
  std::array<float,100> someData;
// fill the data
  int dataCount = 50;
  std::array_part<float> partOfData(someData.data(),dataCount)); // <<<<< here  
  const auto s_x  = std::accumulate(partOfData.begin(), partOfData.end(), 0.0);
}

如果没有这样的容器,我如何包装我所拥有的原始数据,并将它们呈现给std::accumulate和其他std算法?

std::accumulate采用迭代器。您可以将包含感兴趣范围的迭代器传递给它:

auto start = partOfData.begin() + 42;
auto end = partOfData.begin() + 77;
const auto s_x  = std::accumulate(start, end, 0.0);

或者,您可以推出自己的非拥有容器类对象。请参阅此问题以获取示例。