2017-08-23 42 views
-1

试图寻找这个,但只发现使用内置数组不是std :: array obj。基于范围的多维std :: array

// array arr of size 5 
array< array<int, 10>, 10> arr = { 0 }; 

srand((unsigned)time(0)); 

// initialize elements 
for() 
{ 
    for() 
    { 
     item = rand() % 100 + 1; 
    } 
} 

尝试将二维数组obj初始化为随机值的基本示例。即时通讯不知道该怎么把之间(for)循环

回答

1
#include <array> 
using namespace std; 

// array arr of size 5 
array< array<int, 10>, 10> arr; 

int main() { 
    // initialize elements 
    for (auto & outer_array : arr) 
    { 
     for(auto & inner_array : outer_array) 
     { 

     } 
    } 
} 

直播:https://godbolt.org/g/6eLgBk

4

auto&在这里派上用场。那么,第一个range-for循环将引用数组中的每个数组。第二个引用最内层数组中的每个元素。像:

// initialize elements 
for (auto& inner : arr) 
{ 
    for(auto& item : inner) 
    { 
     item = rand() % 100 + 1; 
    } 
} 
2

,而不是使用基于for循环的范围,你甚至可以使用的功能

std::for_each(arr.begin(), arr.end(), [](array<int, 10> const& inner) { 
    auto generator = []() { return rand() % 100 + 1; }; 
    std::generate(inner.begin(), inner.end(), generator); 
} 
0
for(int i = 0; i < arr.size() ; i++) 
{ 
    for(int j = 0; j < arr[i].size() ; j++) 
    { 
     arr[i][j] = rand() % 100 + 1; 
    } 
} 
+2

虽然这个工作,它实际上没有使用C++基于范围的'为'... – ShadowRanger