gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:19:25 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com