将bool数组转换为int数组

时间:2015-04-07 16:35:44

标签: c++

我有以下结构:

 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;
}

我收到以下错误:

  

错误:'lab = mys.nodo :: tablero'

中的'operator ='不匹配

所以我认为转换不能那样做。最有效的方法是什么?

3 个答案:

答案 0 :(得分:2)

以下是如何将2D布尔数组分配给2D整数数组(大小为19x19,如您的情况):

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.

当然,您也可以分配不同的整数值。

希望有所帮助!

答案 1 :(得分: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表达式中的说明符auto。

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

#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 

答案 2 :(得分:0)

嗯,所以最简单的方法就是:

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

Mark Ransom首先提出