动态链接库里的函数为何这么慢?

时间:2021-01-27 19:32:28
听说c++的效率很高的,可是我的函数为何速度很慢,是我的代码写的不行吗?
请高手检查修改!!!


#include<string>
#include<vector>
#include<sstream>
using namespace std;

string WX(string b1,string b2) {                            
     if((b1+b2=="金水")||(b1+b2=="木火")||(b1+b2=="水木")||(b1+b2=="火土")||(b1+b2=="土金"))
          return "SY";
else if((b1+b2=="金土")||(b1+b2=="木水")||(b1+b2=="水金")||(b1+b2=="火木")||(b1+b2=="土火"))
          return "SZ";  
else if((b1+b2=="金木")||(b1+b2=="木土")||(b1+b2=="水火")||(b1+b2=="火金")||(b1+b2=="土水"))
      return "KY";
else if((b1+b2=="金火")||(b1+b2=="木金")||(b1+b2=="水土")||(b1+b2=="火水")||(b1+b2=="土木"))
          return "KZ";
else if((b1+b2=="金金")||(b1+b2=="木木")||(b1+b2=="水水")||(b1+b2=="火火")||(b1+b2=="土土"))
          return "TT";
else      
          return "";
}

string FH1(vector<string> c1,vector<string>c2,vector<string>f4){        
 string n,o;
 int z=0;
 vector<string>::reverse_iterator p1=c1.rbegin();
 vector<string>::reverse_iterator p2=c2.rbegin();
 do

 n=(WX(*(p1+1),*p2))[0];                                
 o=(WX(*(p1+2),*(p2+1)))[0];                                 
     z++; 
    p1++; 
    p2++; 
} while((n==o)&&(n!="T")&&(o!="T"));    
vector<string>::iterator k=f4.begin();
 ostringstream oss;
  oss<<z;
  string q=oss.str(),f2;
  f2=(WX(*(p1+1),*p2))[0];
if(z<15)
  return "";

else  if(f2=="S"){
        if(*p1=="金")
               return q+*(k+0);
        if(*p1=="木")
       return q+*(k+1);         
        if(*p1=="水")
       return q+*(k+2);
        if(*p1=="火")
       return q+*(k+3);
        if(*p1=="土")
       return q+*(k+4);
 }
else  if(f2=="K"){
          if(*p1=="金")
                      return q+*(k+5);
          if(*p1=="木")
      return q+*(k+6);         
          if(*p1=="水") 
      return q+*(k+7);
          if(*p1=="火")
      return q+*(k+8);
          if(*p1=="土")
      return q+*(k+9);
}
  }

6 个解决方案

#1


动态库里的函数运行跟自己本身编写的在速度上基本没什么太大差距,多了一个调用过程而已。至于运行速度问题关键我认为在你的函数里。你的函数却是应该优化一下,看起来有些乱

#2


该怎么优化呢??

#3


试一下不用DLL直接把函数卸载程序里的运行速度,如果仍然慢,那就是算法的问题

#4


string WX(string b1,string b2)
string FH1(vector<string> c1,vector<string>c2,vector<string>f4)
改為
string WX(string const &b1,string const &b2)
string FH1(vector<string> const &c1,vector<string>const &c2,vector<string>const &f4)

這樣速度就上去了。

#5


改成引用的话,c1,c2,f4在代码里怎么改?

#6


将反向迭代器改成反向常迭代器。
你的函数中是不对vector作任何改变的。

#1


动态库里的函数运行跟自己本身编写的在速度上基本没什么太大差距,多了一个调用过程而已。至于运行速度问题关键我认为在你的函数里。你的函数却是应该优化一下,看起来有些乱

#2


该怎么优化呢??

#3


试一下不用DLL直接把函数卸载程序里的运行速度,如果仍然慢,那就是算法的问题

#4


string WX(string b1,string b2)
string FH1(vector<string> c1,vector<string>c2,vector<string>f4)
改為
string WX(string const &b1,string const &b2)
string FH1(vector<string> const &c1,vector<string>const &c2,vector<string>const &f4)

這樣速度就上去了。

#5


改成引用的话,c1,c2,f4在代码里怎么改?

#6


将反向迭代器改成反向常迭代器。
你的函数中是不对vector作任何改变的。