c – boost :: dynamic_bitset concat性能
发布时间:2020-12-16 06:56:12 所属栏目:百科 来源:网络整理
导读:我希望以一种不会破坏性能的方式与较小的一个相关联.目前,我的应用程序仅在以下代码中花费了20%的cpu时间: boost::dynamic_bitset encode(const std::vectorchar data){ boost::dynamic_bitset result; std::for_each(data.begin(),data.end(),[](unsigned
我希望以一种不会破坏性能的方式与较小的一个相关联.目前,我的应用程序仅在以下代码中花费了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插入其中.改变这一点可以让你的生活更轻松. 我也很好奇什么类型的代码_是 – 如果它是一个地图你可以用一个向量替换它,或者因为它是最大静态大小(256个条目是无符号字符的最大值),一个静态数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |