2017-08-23 71 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