2015-04-07 94 views
0

陣列我具有以下結構:轉換布爾的陣列的INT

struct nodo { 
array<array<bool,19>,19> tablero; 
array<int,2> p1,p2;  
int d1,d2;        
int u1,u2;        
} mys; 

其通過參數傳遞到功能

void myf(nodo mys){ 
// that attempts to do the following conversion: 
array<array<int,19>,19> lab=mys.tablero; 
} 

而我收到以下錯誤:

error: no match for ‘operator=’ in ‘lab = mys.nodo::tablero’

所以我認爲轉換不能這樣做。什麼是最有效的方法呢?

+2

兩個'建議'循環會做的伎倆。 –

+0

你需要用那個'bool'數組做什麼?另外爲什麼你需要它是一個'int'數組呢? – Shoe

+0

@Mark Ransom這是最有效的方法嗎? – D1X

回答

0

嘛,所以最直接的方法很簡單:

for (i=0; i<=18; i++){ 
     for (j=0; j<=18 ; j++){ 
       lab[i][j]= mys.tablero[i][j]; 
      } 
} 

正如馬克贖金放在首位

2

這裏是你如何可以(在你的情況下,大小19×19)的分配2D布爾數組到一個二維整數數組:

for(int i=0; i<19; i++) { 
    for(int j=0; j<19; j++) { 
     lab[i][j] = (tablero[i][j])?1:0; 
    } 
} 

請注意在賦值語句中使用三元運算符。如果

tablero[i][j] 

爲真,那麼

lab[i][j] will be 1, otherwise it will be 0. 

當然,你可以分配不同的整數值爲好。

希望有幫助!

2

這兩個數組

array<array<bool,19>,19> tablero 

array<array<int,19>,19> lab; 

具有不同的類型和存在來自一個陣列的隱式轉換到另一個。

你可以寫自己的循環,或使用一些標準的算法,因爲它是在這個示範項目

#include <iostream> 
#include <array> 
#include <algorithm> 
#include <numeric> 

int main() 
{ 

    std::array<std::array<bool,19>,19> tablero; 
    std::array<std::array<int,19>,19> tablero1; 

    std::accumulate(tablero.begin(), tablero.end(), tablero1.begin(), 
        [](auto it, const auto &a) 
        { 
         return std::copy(a.begin(), a.end(), it->begin()), ++it; 
        }); 

    return 0; 
} 

你的編譯器支持自動符在lambda表達式中的代碼將彙編出。

或者相同的程序,但有一些輸出

#include <iostream> 
#include <iomanip> 
#include <array> 
#include <algorithm> 
#include <numeric> 

int main() 
{ 
    const size_t N = 3; 
    std::array<std::array<bool, N>, N> tablero = 
    { 
     { 
      { true, false, false }, 
      { false, true, false }, 
      { false, false, true } 
     } 
    }; 
    std::array<std::array<int, N>, N> tablero1; 

    std::accumulate(tablero.begin(), tablero.end(), tablero1.begin(), 
        [](auto it, const auto &a) 
        { 
         return std::copy(a.begin(), a.end(),it->begin()), ++it; 
        }); 

    for (const auto &a : tablero) 
    { 
     for (auto b : a) std::cout << std::boolalpha << b << ' '; 
     std::cout << std::endl; 
    } 

    std::cout << std::endl; 

    for (const auto &a : tablero1) 
    { 
     for (auto x : a) std::cout << x << ' '; 
     std::cout << std::endl; 
    } 

    return 0; 
} 


true false false 
false true false 
false false true 

1 0 0 
0 1 0 
0 0 1