c – 基于范围的多维数组
发布时间:2020-12-16 06:02:09 所属栏目:百科 来源:网络整理
导读:我的嵌入式系统有一个C 11版本的g,所以我一直在清理代码 for( uint16_t* p = array; p (array)[1]; ++p ) { *p = fill_value;} 至 for( uint16_t r : array ) { r = fill_value;} 这是更可读的. 是否有一个基于范围的for循环,它对array2 [m] [n]的所有元素进
我的嵌入式系统有一个C 11版本的g,所以我一直在清理代码
for( uint16_t* p = array; p < (&array)[1]; ++p ) { *p = fill_value; } 至 for( uint16_t& r : array ) { r = fill_value; } 这是更可读的. 是否有一个基于范围的for循环,它对array2 [m] [n]的所有元素进行操作? 旧版本是 for( int16_t* p = array2[0]; p < (&array2)[1][0]; ++p ) { *p = fill_value; } 而且我不想嵌套循环,除非它保证编译器会平坦化. (FWIW,编译器是TI Code Composer Studio 6.0.0附带的GNU 4.7.4 Linaro g ARM交叉编译器) 解决方法
作为一个例子,有多种打印和操作多维数组值的方式.
int arr[2][3] = { { 2,3,4 },{ 5,6,7} }; 第一种方法, size_t count = 0 ; for( auto &row : arr) for(auto &col : row) col = count ++; 在第一个for循环中,我们指的是两个数组.那么在第二个数组中,我们分别引用了这些子数组的3个元素.而且我们也把计数分配给col.所以,它迭代到子阵列的下一个元素. 第二种方法, for( auto &row : arr) for( auto col : row) cout << col << endl; 我们在第一个循环中参考,因为我们希望避免数组转换为指针. 如果这样做(错误情况:第一个for循环不是参考), for( auto row : arr) // program won't compile for( auto col : row) 这里,我们在行中有*.当我们到达第二个循环.因为行现在是int *而不是列表,程序将不会编译.您必须创建一个列表,那么只有我们可以将其传递给范围广泛的循环,并使用它来迭代该列表. vector<int> list = { *(row+0),*(row+1),*(row+ 2) } ; 现在我们可以使用列表进行迭代 for ( ----- : list) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容