2016-05-02 16 views
4

私は入力のASC​​II値を含むbitsetのベクトルを返す関数を持っています。C++でビットセットのベクトルを返す

typedef bitset<64> block; 

vector<block> input_to_binary(string s) 
{ 
    vector<block> v; 
    block blk; 
    int j = blk.size() - 1; 


    for (int i = 0; i < s.size(); i++) 
    { 
     bitset<8> b(s[i]); 

     for (int k = b.size() - 1; k >= 0; k--) 
     { 
      blk[j] = b[k]; 
      j--; 
     } 


     if (i % 8 == 7 || i == s.size() - 1) 
     { 
      // either the block is full now or this is the last character of the input 
      v.push_back(blk); 
      j = blk.size() - 1; 

は、それはすべての関数の内部で大丈夫です。しかしmain()に戻った後

  cout << "Just after the push:" << endl; 
      for (int i = 0; i < v.size(); i++) 
      { 
       block blk = v[i]; 
       for (int i = blk.size() - 1; i >= 0; i--) 
        cout << blk[i] << "\t"; 
      } 
     } 

    } 

    return v; 
} 
 

    Just after the push: 
    0 1 0 0 1 0 0 0 0 1 1 0 0 1 0 1 0 1 1 
    0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 
    1 1 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 
    1 0 0 1 0 0 0 

bitset s'のデータが失われます。

int main() 
{ 
    string s = "Hello, Hi, Goodbye"; 
    vector<block> v = input_to_binary(s); 
    cout << "v.size() is " << v.size() << endl; 
    for (int i = 0; i < v.size(); i++) 
    { 
     // block current = v[i]; // tried either one 
     block current(v[i]); 
     cout << "block no. " << i << " with size " << current.size() << endl; 
     for (int j = current.size() - 1; j >= 0; j--) 
      cout << current[i] << "\t"; 
     cout << endl; 
    } 

} 
 

    v.size() is 3 
    block no. 0 with size 64 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 

なぜこのようなことが起こっていますか?それは約bitsetのコピーコンストラクタです、私は正常に動作するはずですか?

答えて

8

(あなたがさらに読む前に、いくつかの額の保護に置きたい場合があります)

 cout << current[i] << "\t"; 

あなたがjを意味するのですか?最初の要素を64回印刷しています。関数内からの出力に基づいて、その値は0です。

時々、コードをあまり長く見ていると、実際には画面上で:)行く休憩を取る!あなたはそれに値する。

STLの作家が安全であるように見える...少なくとも今のところ: - D

+0

ああ神。あなたはあなたのアップヴォートに値するでしょうが、これが抹消される方法はありますか? –

+0

さらに3人がトピック構文エラーを閉じるために投票した場合。あなたは司会者の削除を要求することができるかもしれません。 – xaxxon

関連する問題