c++ - 使用较大数组的一部分调用函数

标签 c++ c++17

我正在重构一些代码,并决定将一个二维数组合并为一个更大的一维数组。现在的问题是我有一些函数将那些较小的数组作为参数,我更愿意保留它们的签名。是否可以仅使用较大数组的一部分来调用函数?

f1 是我目前拥有的,f2 是重构后的样子:

#include <array>

void func(std::array<int const, 5> const& arr, int i);

void f1() {
    static std::array<std::array<int const, 5>, 2> const arr{{{1, 2, 3, 4, 5}, {6, 7, 8, 9, 0}}};
    func(arr[0], 0);
    func(arr[1], 1);
}

void f2() {
    static std::array<int const, 10> const arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    //TODO: call func with first and last 5 elements. 
}

最佳答案

如果您将函数更改为采用 Peter 评论的一系列元素,这将变得微不足道。您将为第一个数组传递 arr.begin()arr.begin() + 5arr.begin() + 5arr.end() 第二个。

void func(int* b, int* e, int i);

您也可以采用 span 来使事情更清晰。这里gsl::span使用但你可以write your own如果你想:

#include <gsl/span>

void func(gsl::span<int> s, int i);

static std::array<int const, 10> const arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
func( {arr.begin(), arr.begin() + 5}, 0 );
func( {arr.begin() + 5, arr.end()}, 1 );

关于c++ - 使用较大数组的一部分调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57236928/

相关文章:

C++类双排序(?)

c++ - 在构造函数中带有参数的 blitz++ 类的 GoogleTest Fixture

c++ - 编译时将树转换为元组

c++ - 是否可以创建更好的 `std::min` 和 `std::max` 版本?

c++ - 使用模板模板参数的模板参数

c++ - 为什么模板不能在 extern "C" block 内?

c++ - 正确删除指针双端队列

c++ - std::cout<< ' ' <<std::endl;输出一个数字;为什么?

c++ - 允许模板化类的结构化绑定(bind)

c++ - std::shared_mutex 和 std::shared_lock 是读者还是作者更喜欢?