C++で再帰関数を使ってn桁のビットの値を全通り列挙したいと思っていますがvectorを使う場合と配列を使う場合で挙動が異なり理由がわからず困っています。
例えば
C++
1#include <iostream> 2#include<vector> 3using namespace std; 4void DFS(int n,vector<int> ZeroOnes){ 5 if(n==ZeroOnes.size()){ 6 for(int i=0;i<ZeroOnes.size();i++)cout<<ZeroOnes[i]; 7 cout<<endl; 8 } 9 else{ 10 DFS(n+1,ZeroOnes); 11 ZeroOnes[n]=1; 12 DFS(n+1,ZeroOnes); 13 } 14} 15int main(){ 16 vector<int> ZeroOnes={0,0}; 17 DFS(0,ZeroOnes); 18 }
を実行すると
00 01 10 11
と所望の結果が得られるのですが
C++
1#include <iostream> 2#include<vector> 3using namespace std; 4#define N 2 5void DFS(int n,int ZeroOnes[N]){ 6 if(n==N){ 7 for(int i=0;i<N;i++)cout<<ZeroOnes[i]; 8 cout<<endl; 9 } 10 else{ 11 DFS(n+1,ZeroOnes); 12 ZeroOnes[n]=1; 13 DFS(n+1,ZeroOnes); 14 } 15} 16int main(){ 17 int ZeroOnes[N]={0,0}; 18 DFS(0,ZeroOnes); 19 }
とvectorを使っていたところを配列で書き直すと
00 01 11 11
と出力されてしまいます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/27 01:37