C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – boost :: dynamic_bitset concat性能大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望以一种不会破坏性能的方式与较小的一个相关联.目前,我的应用程序仅在以下@L_674_2@中花费了20%的cpu时间:

boost::dynamic_bitset<> encode(const std::vector<char>& data)
{
    boost::dynamic_bitset<> result;

    std::for_each(data.begin(),data.end(),[&](unsigned char symbol)
    {
        for(size_t n = 0; n < codes_[symbol].size(); ++n)
            result.push_BACk(codes_[symbol][n]); // codes_[symbol][n].size() avarage ~5 bits
    });
    return result;
}

我已经阅读了这个post,它提出了一个解决方案,遗憾的是,由于目标位集和源位集的大小之间的大小差异非常大,因此对我不起作用.

有任何想法吗?

如果使用boost :: dynamic_bitset无法有效地执行此操作,那么我会对其他建议持开放态度.

解决方法

是因为你继续使用push_BACk(),但事实上,你已经提前知道了这个大小.这意味着大量的冗余复制和重新分配.你应该先调整它的大小.另外,你没有push_BACk()每个值 – 你应该可以使用某种形式的insert()(我实际上并不知道它是确切的接口,但我认为append()是名称)一次插入整个目标矢量,这应该是更好的.

另外,你将dynamic_bitset保留为unsigned long,但据我所知,你实际上只是将unsigned char插入其中.改变这一点可以让你的生活更轻松.

我也很好奇什么类型的@L_674_2@_是 – 如果它是一个地图你可以用一个向量替换它,或者因为它是最大静态大小(256个条目是无符号字符的最大值),一个静态数组.

大佬总结

以上是大佬教程为你收集整理的c – boost :: dynamic_bitset concat性能全部内容,希望文章能够帮你解决c – boost :: dynamic_bitset concat性能所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。