便利だなーと思ったTips.(C++)
vectorの要素出力で,スペース区切りで最後に改行
for(int i = 0; i < vec.size(); i++) { cout << vec[i] << " /n"[i + 1 == vec.size()]; }
vector⇄set の生成
コンストラクタを使う.
// vector→set set<int> st(vec.begin(), vec.end()); // set→vector vector<int> vec(st.begin(), st.end());
set, mapの要素全取得
for-eachを使う.
// set for(auto val : st) { // ... } // map for(auto [key, val] : mp) { // ... }
pair, tupleの分解
構造化束縛を使う.
//pair auto [a, b] = p; // tuple auto [a, b, c] = t;
グリッドで隣接する八方を調べる
差分-1~1の二重for.dx=0, dy=0はcontinueすることに注意!
// x: 今見ているマスのx座標 // y: 今見ているマスのy座標 for(int dx = -1; dx <= 1; dx++) { for(int dy = -1; dy <= 1; dy++) { if(dx == 0 && dy == 0) continue; int nx = x + dx; int ny = y + dy; // ... } }
枠内チェックも一緒にしちゃう版.
for(int nx = max(x - 1, 0); nx <= min(x + 1, h - 1); nx++) { for(int ny = max(y - 1, 0); ny <= min(y + 1, w - 1); ny++) { if(nx == x && ny == y) continue; // ... } }