C++中如何正确捕获数组以便在lambda里使用?
时间: 2024-09-07 22:04:55 浏览: 20
在C++中,为了在lambda函数内部正确地使用数组,有几种常见的方法:
1. **通过引用** (By Reference):
```cpp
int arr[5] = {1, 2, 3, 4, 5};
auto lambda = [&arr](int index) {
std::cout << arr[index] << std::endl;
};
```
这样,你在lambda中可以直接通过引用arr访问数组元素,不会创建额外的副本。
2. **通过指针** (By Pointer):
```cpp
int arr[5] = {1, 2, 3, 4, 5};
auto lambda = [](int* ptr, int size) {
for(int i=0; i<size; ++i)
std::cout << *ptr++ << std::endl;
};
lambda(arr, sizeof(arr)/sizeof(arr[0]));
```
使用指向数组起始位置的指针,并传递数组大小作为参数。
3. **通过范围for循环** (Range-based for loop):
如果你只是想遍历数组,可以使用范围for循环:
```cpp
const int arr[5] = {1, 2, 3, 4, 5};
auto lambda = [] (const auto& values) {
for (auto value : values)
std::cout << value << std::endl;
};
lambda(arr);
```
注意这里需要使用`const`修饰数组,因为lambda不会修改原数组。
以上三种方式可以根据需求选择合适的捕获策略。