競プロでグリッド上のマスの上下左右方向を見るときint DY[4] = {1, 0, -1, 0};
みたいな配列が使われます。
今回は構造化束縛で書いてみました。
構造化束縛するやつ
constexpr array<pair<int, int>, 4> DYDX = {make_pair(1, 0), make_pair(0, 1), make_pair(-1, 0), make_pair(0, -1)}; for (auto &[y, x] : DYDX) { cout << y << " " << x << "\n"; }
1 0 0 1 -1 0 0 -1
for文まわりが簡潔になるのが長所かと思います。
比較のためよく見る配列DY, DXをつかうやつと1配列で表すやつを紹介します。
配列DY, DXをつかうやつ
よく見るやつです。
constexpr array<int, 4> DY = {1, 0, -1, 0}; constexpr array<int, 4> DX = {0, 1, 0, -1}; for (int i = 0; i < 4; i++) { const int y = DY[i], x = DX[i] ; cout << y << " " << x << "\n"; }
1 0 0 1 -1 0 0 -1
DY, DXを1配列で表すやつ
このプレゼンで見ました。 hackmd.io
constexpr array<int, 5> D = {0, 1, 0, -1, 0}; for (int i = 0; i < 4; i++) { const int x = D[i], y = D[i + 1]; cout << y << " " << x << "\n"; }
1 0 0 1 -1 0 0 -1