使用运行时大小将原始数据包装在std容器中,如数组

时间:2014-11-05 10:07:58

标签: c++ arrays c++11 containers std

是否有任何std容器可以像std :: array一样固定大小,但是大小不是编译时间,而是运行时?

我想将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和其他标准算法?

1 个答案:

答案 0 :(得分:1)

std::accumulate接受迭代器。您可以传递包含感兴趣范围的迭代器:

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

或者,您可以推出自己的非拥有容器类对象。有关示例,请参阅this question