【问题标题】:Returning a vector of bitsets in C++ [closed]在 C++ 中返回位集的向量 [关闭]
【发布时间】:2016-05-02 09:04:58
【问题描述】:

我有一个函数,它返回一个包含其输入的 ASCII 值的 bitsets 向量。

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;

函数内部一切正常:

            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;
}
就在推送之后: 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;
    }

}
v.size() 为 3 块号0 大小为 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 的复制构造函数,我认为它应该可以正常工作吗?

【问题讨论】:

    标签: c++ vector pass-by-value bitset


    【解决方案1】:

    (在进一步阅读之前,您可能需要戴上一些额头保护)

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

    你是说j吗?您将第一个元素打印 64 次 - 根据您在函数内的输出,该值为 0。

    有时你盯着代码看了这么久,你开始真正看到你的假设而不是屏幕上的内容:) 休息一下!你应得的。

    看起来 STL 编写器是安全的……至少现在是这样 :-D

    【讨论】:

    • 天哪。你应该得到你的支持,但是有什么办法可以消除它?
    • 如果还有 3 个人投票关闭主题 - 语法错误。您或许可以请求移除版主 - 不确定。
    猜你喜欢
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2015-05-28
    • 2018-09-08
    • 1970-01-01
    • 2017-01-13
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多