Я работаю над игрой, и я нахожу себя очень часто проверяя, что некоторые величины находятся в пределах показателей, принятых вектором, который представляет мой мир:Простой способ проверить большое количество подобных условий?
if(a >= 0 && a < 16 && b >= 0 && b < 16 && c >= 0 && c < 16 &&
d >= 0 && d < 16 && e >= 0 && e < 16)
{
//do things with vector[a][b][c][d][e]
}
мне часто приходится проверять еще чем это. Есть ли способ, который я могу сделать эти проверки более краткими и/или более легкими для чтения?
В качестве альтернативы, существует ли способ, которым я могу избежать проверки полностью? Вектор 16x16x16x16x16; могу ли я сделать так, чтобы, если бы я дал ему 16 в качестве индекса, он ничего не сделал бы, а не segfault?
Напишите функцию 'inRange()' и вызовите ее для всех переменных? – yizzlez
Это проблема x-y. Гораздо лучше объединить 4 точки и 4 связывания в нечто вроде 'QRect' и использовать метод типа' bool QRect :: contains (const QPoint & point, bool proper = false) const' http://doc.qt.io/ qt-5/qrect.html # содержит – user3528438
Во-первых, я не думаю, что разумно «просто ничего не делать, а не segfault», если индекс выходит за пределы диапазона. Простая причина заключается в том, что вызывающий код может считать, что он имеет правильный индекс, что означает, что ошибка распространяется через программу. Однако, если это не имеет значения, вы можете заменить вектор векторов 16x16x16x16x16 на один вектор и вычислить индекс, используя бит-сдвиг, что относительно быстро и позволяет избежать накладных расходов при переходе через массивы. BTW, если размер 16 фиксирован, любое 'i', где' i! = (I & 15) 'является недопустимым. Наконец, использование опции 'vector :: at()' будет вариантом. –