4
私は入力のASCII値を含む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
のコピーコンストラクタです、私は正常に動作するはずですか?
ああ神。あなたはあなたのアップヴォートに値するでしょうが、これが抹消される方法はありますか? –
さらに3人がトピック構文エラーを閉じるために投票した場合。あなたは司会者の削除を要求することができるかもしれません。 – xaxxon