2次元配列の0初期化
競プロ中に気づいたことをメモ
まだまだ弱い人間なので0初期化もロクに理解していない
#include<bits/stdc++.h> using namespace std; #define FOR(i,r,n) for(ll i = (ll)(r); i < (ll)(n); ++i) #define REP(i,n) FOR(i,0,n) using ll = long long int; template < typename T > inline void dbg(T a) {cout << a << ' ' << endl;} ll a, b, n, ans = 0, sum = 0, cnt = 0; int main() { cin >> n; ll tree[n][n] = { { 0 } }; REP(i,n-1) { cin >> a >> b; tree[a-1][b-1] = 1; } for (auto && e : tree) { REP(i,n) { dbg(e[i]); } } }
入力を以下のようにとるとき
4 1 1 2 2 3 3
AtCoderのC++14(GCC 5.4.1)では以下のようになる
1 4197637 140722148830304 6300464 0 1 0 0 0 0 1 0 0 0 0 0
tree[0]の配列は{0}で初期化されない
配列をすべて0初期化したいならば
... ll tree[n][n] = {}; ...
このように書けばよい
C++ならstd::fill(&(tree[0][0]),&(tree[n-1][n-1]),0);という方法もあるがこれは長いしめんどい