我现在有一个大脑放屁,我正在寻找一种快速方法来获取数组并将其中一半传递给函数。如果我有十个元素的数组A,在某些语言中,我可以将A [5:]这样的东西传递给函数并完成它。在C++中是否有类似的构造?显然,我想避免和排序循环功能。C++中有从数组中获取子数组的方法吗?
7
A
回答
7
是的。在普通的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;
}
再次,没有边界检查。
相关问题
- 1. 有从数组中获取浮点数的简写方法吗?
- 2. php从数组中获取子数组
- 3. 从C#方法获取数组结果
- 4. 有没有办法从C#中的多维数组中获取数组?
- 5. (C++)如何从数组中获取没有嵌套循环的子数组?
- 6. 如何从VB.NET中的大数组中获取子数组?
- 7. 如何从PHP中的数组中获取“子数组”?
- 8. 从数组中获取数组的值?
- 9. 从2D double [] []数组获取子数组
- 10. 从C中的多维数组中获取列的有效方法是什么?
- 11. 获取JSON数组从C#中的LINQ
- 12. 无法从数组中获取数据
- 13. 无法从数组中获取数据
- 14. 从数组中获取子类
- 15. 从JSON获取子数组
- 16. c#从数组中获取最小值
- 17. 从数组或列表中获取所有方法
- 18. 从数组c获取maxAbs#
- 19. 获取索引映射数组的子数组的有效方法
- 20. 是从数据库中获取数据的有效方法吗?
- 21. 如何从数组中获取子数组?
- 22. 从C中读取数组#
- 23. 从数组中获取CGRect
- 24. 从Parse中获取数组
- 25. 从数组中获取MongoId
- 26. 从数组中获取值
- 27. 从数组中获取值
- 28. 从strings.xml中获取数组
- 29. 无法从数组中获取值
- 30. 如何从数组数组中获取有关子序列的信息?
也许你的函数应该使用迭代器。 – chris
您不能将数组传递给C++中的函数,因为C++没有数组值。那么你的功能实际上是什么? – melpomene
我会有一个数组int [] a = {1,2,3,4,5,6,7,8,9,10}。然后,我正在寻找一种方法来获取子数组int [] a1 = {6,7,8,9,10}。 –