我有以下结构:
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 ='不匹配
所以我认为转换不能那样做。最有效的方法是什么?
答案 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首先提出