gpt4 book ai didi

c++ - C++ 中有没有办法从数组中获取子数组?

转载 作者:可可西里 更新时间:2023-11-01 17:51:54 26 4
gpt4 key购买 nike

我现在脑袋放屁,我正在寻找一种快速的方法来获取一个数组并将其一半传递给一个函数。如果我有一个包含十个元素的数组 A,在某些语言中我可以将类似 A[5:] 的内容传递给函数并完成它。 c++ 中是否有类似的构造?显然我想避免和某种循环功能。

最佳答案

是的。在纯 C 中,您使用指针,但在 C++ 中,您可以使用任何类型的迭代器(指针可以被视为迭代器)。

template<typename Iter>
void func(Iter arr, size_t len) { ... }

int main() {
int arr[10];
func(arr, 10); // whole array
func(arr, 5); // first five elements
func(arr + 5, 5); // last five elements

std::vector<Thing> vec = ...;
func(vec.begin(), vec.size()); // All elements
func(vec.begin(), 5); // first five
func(vec.begin() + 5, vec.size() - 5); // all but first 5

return 0;
}

典型的技巧是传递一个指向数组第一个元素的指针,然后使用一个单独的参数来传递数组的长度。不幸的是,没有边界检查,所以你必须小心确保正确,否则你会在内存中乱涂乱画。

您还可以使用半开范围。这是最常见的方法。标准库中的许多函数(如 std::sort)都是这样工作的。

template<class Iter>
void func(Iter start, Iter end) { ... }

int main() {
int arr[10];
func(arr, arr + 10); // whole array
func(arr, arr + 5); // first five elements
func(arr + 5, arr + 10); // last five elements

std::vector<Thing> vec = ...;
func(vec.begin(), vec.end()); // whole vector
func(vec.begin(), vec.begin() + 5); // first five elements
func(vec.begin() + 5, vec.end()); // all but the first five elements

return 0;
}

同样,没有边界检查。

关于c++ - C++ 中有没有办法从数组中获取子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576160/

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