Goh*_*ans 4 c++ vector pass-by-value bitset
我有一个函数返回bitset包含其输入的ASCII值的s 向量.
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;
Run Code Online (Sandbox Code Playgroud)
在函数内部都很好:
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;
}
Run Code Online (Sandbox Code Playgroud)
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
返回之后main(),bitsets'数据丢失了:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
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复制构造函数,我认为应该可以正常工作吗?
(在进一步阅读之前,你可能想要一些额头保护)
cout << current[i] << "\t";
Run Code Online (Sandbox Code Playgroud)
你的意思是j?您将打印出第一个元素64次 - 并根据函数内的输出,该值为0.
有时你盯着代码这么久,你开始真正看到你的假设,而不是屏幕上的内容:)去休息一下!你应得的.
看起来STL作家是安全的......至少目前如此:-D
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |