我正在重构一些代码,并决定将一个二维数组合并为一个更大的一维数组。现在的问题是我有一些函数将那些较小的数组作为参数,我更愿意保留它们的签名。是否可以仅使用较大数组的一部分来调用函数?
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() + 5
和 arr.begin() + 5
, arr.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/