我现在有一个大脑放屁,我正在寻找一种快速的方法来取一个数组并将其中的一半传递给一个函数.如果我有一个十个元素的数组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;
}
Run Code Online (Sandbox Code Playgroud)
典型的技巧是将指针传递给数组的第一个元素,然后使用单独的参数传递数组的长度.不幸的是,没有边界检查,所以你必须小心地把它弄好,否则你会在你的记忆上涂鸦.
您也可以使用半开放范围.这是最常用的方法.标准库中的许多函数(如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;
}
Run Code Online (Sandbox Code Playgroud)
再次,没有边界检查.
| 归档时间: |
|
| 查看次数: |
29111 次 |
| 最近记录: |