有时候,一些编程技巧可以帮我们提高工程效率,在面试中也可以使面试官耳目一新:
今天,聊聊二维矩阵的常见操作。
二维矩阵常规操作:
void PrintTwoFor(int (&data)[3][4])
{
for(int i=0;i<col;i++)
{
for(int j=0;j<row;j++)
{
cout<<data[i][j];
}
cout<<endl;
}
}一拍脑袋想着能不能用一个for实现:
void PrintOneFor(int (&data)[3][4])
{
for(int i=0;i<12;i++)
{
//全部除以列
cout<<data[i/4][i%4];
if(i%4==3)
cout<<endl;
}
}实际测试:
int main()
{
int data[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
cout<<"两个for实现:"<<endl;
PrintTwoFor(data);
cout<<"一个for实现: "<<endl;
PrintOneFor(data);
}测试结果:

应用在Qt开发案例中:
for(int i=0;i<20;i++)
{
myPushButton *menuBtn=new myPushButton(":/res/LevelIcon.png");
menuBtn->setParent(this);
menuBtn->move(25+i%4*70,130+i/4*70);
//监听每个按钮的点击事件
connect(menuBtn,&myPushButton::clicked,[=](){
QString str=QString("点击了第 %1 关").arg(i+1);
qDebug()<<str;
});
QLabel *label=new QLabel;
label->setParent(this);
label->setFixedSize(menuBtn->width(),menuBtn->height());
label->setText(QString::number(i+1));
label->move(25+i%4*70,130+i/4*70);
//设置label上的文字对齐方式
label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
//设置让鼠标进行穿透 51号属性
label->setAttribute(Qt::WA_TransparentForMouseEvents);
}结果显示:
