bit全探索のテンプレートと拡張版

(1)N個の0,1から成る2^N個の配列を生成

int N;
cin >> N;
for (int S = 0; S < 1 << N; S++) {
	//作成
	vector<int>A;
	rep(i, N) {
		A.push_back(S >> i & 1);
	}
	//操作
	rep(i, N) {
		cout << A[i] << ' ';
	}
	cout << endl;
}

入力例
3
出力例
0 0 0
1 0 0
0 1 0
1 1 0
0 0 1
1 0 1
0 1 1
1 1 1

(2)N個の0,1…M-1から成るM^N個の配列を生成

int N;
int M;
cin >> N >> M;
for (int S = 0; S < pow(M,N); S++) {
	//作成
	int s = S;
	vector<int>A;
	rep(i, N) {
		A.push_back(s%M);
		s /= M;
	}
	//操作
	rep(i, N) {
		cout << A[i] << ' ';
	}
	cout << endl;
}

入力例
2 3
出力例
0 0
1 0
2 0
0 1
1 1
2 1
0 2
1 2
2 2