Pracuję nad grą, a ja znajduję się bardzo często sprawdzając, że pewne ilości są w granicach wskaźników przyjętych przez wektor, który reprezentuje mój świat:Prosty sposób na sprawdzenie dużej liczby podobnych warunków?
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]
}
Często trzeba sprawdzić jeszcze bardziej warunki niż to. Czy istnieje sposób, aby sprawić, by te kontrole były bardziej zwięzłe i/lub łatwiejsze do odczytania?
Czy istnieje sposób, w jaki mogę całkowicie uniknąć przeprowadzania kontroli? Wektor to 16x16x16x16x16; czy mogę zrobić tak, że gdybym miał dać mu 16 jako indeks, nie zrobiłoby to nic zamiast segfault?
Napisz funkcję 'inRange()' i wywołaj ją we wszystkich zmiennych? – yizzlez
To jest problem x-y. Znacznie lepiej jest połączyć 4 punkty i 4 obligacje w coś takiego jak "QRect" i użyć metody takiej jak 'bool QRect :: zawiera (const QPoint & point, bool proper = false) const' http://doc.qt.io/ qt-5/qrect.html # zawiera – user3528438
Po pierwsze, nie uważam, że mądrze jest "po prostu nie robić nic, a nie segfault", jeśli indeks jest poza zakresem. Prostym powodem jest to, że kod wywołujący może założyć, że ma poprawny indeks, co oznacza, że błąd rozprzestrzenia się za pośrednictwem programu. Jeśli jednak to nie ma znaczenia, można zamienić wektor wektorów 16x16x16x16x16 na pojedynczy wektor i obliczyć indeks przy użyciu przesunięcia bitowego, który jest stosunkowo szybki i unika się narzutu skakania przez tablice. BTW, jeśli rozmiar 16 jest ustalony, każde 'i' gdzie' i! = (I & 15) 'jest nieprawidłowe. Wreszcie, użycie opcji 'vector :: at()' będzie opcją. –