c – 在这种情况下我应该使用算法还是手工编写代码?

c – 在这种情况下我应该使用算法还是手工编写代码?,第1张

概述好的,有人告诉我哪个更好.我需要| =一个向量的元素与另一个向量.也就是说,我想 void orTogether(vector<char>& v1, const vector<char>& v2){ typedef vector<char>::iterator iter; for (iter i = v1.begin(), iter j = v2.begin() ; i != v 好的,有人告诉我哪个更好.我需要| =一个向量的元素与另一个向量.也就是说,我想

voID orTogether(vector<char>& v1,const vector<char>& v2){    typedef vector<char>::iterator iter;    for (iter i = v1.begin(),iter j = v2.begin() ; i != v1.end(); ++i,++j)        *i |= *j;}

由于需要处理2个集合,我无法使用for_each.我想我可以做点什么

struct BitWiSEOr{    char operator()(const char& a,const char& b) {return a | b;}};voID orTogether2(vector<char>& v1,const vector<char>& v2){    transform(v1.begin(),v1.end(),v2.begin(),v1.begin(),BitwiSEOr());}

这是一个更有效的解决方案,即使最上面的一个到位,但底部是分配?这是在处理循环的中间,我需要尽可能快的代码.

编辑:为BitwiSEOr添加(明显?)代码.另外,我收到很多关于非相关事情的评论,例如检查v2的长度和更改名称.这只是一个例子,真正的代码更复杂.

好吧,我描述了两个. orTogether2比orTo快得多,所以我将使用transform方法.我很惊讶,或者在MSVC9发布模式下,总共2倍快了4倍.我跑了两次,第二次更改顺序,以确保它不是某种缓存问题,但结果相同.感谢大家的帮助.

解决方法 最底层的将编译为与第一个有效相同,您的OR仿函数将被确保内联.因此,如果您需要添加更多灵活性或调试框架或其他任何内容,第二个习语会更灵活.

由于第一个没有任何好处,请使用transform方法.一旦你养成这种习惯,你就会停止考虑所有应用程序的显式循环选择,因为它是不必要的.第一种方法的唯一优势是更容易向初学者C程序员解释,他们对原始C更熟.

总结

以上是内存溢出为你收集整理的c – 在这种情况下我应该使用算法还是手工编写代码?全部内容,希望文章能够帮你解决c – 在这种情况下我应该使用算法还是手工编写代码?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1222535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存