::iterator iterJ; 4 int i = 0;5 for( ; i < m_Tree.size()-1; ++iterI,i++) 6 {
7 //iterJ = m_Tree.begin(); 8 //advance(iterJ, i+1); 9 iterJ = iterI;10 iterJ++;
11 for(; iterJ != m_Tree.end(); iterJ++)12 {
13 float s = S((iterI->dvmap),(iterJ->dvmap));14 if(s > mostSim)15 {//this is the pair16 mostSim = s;17 sp.s1 = iterI;18 sp.s2 = iterJ;19 }20 }21 }
我想得到iterI所指向的下⼀个元素,于是我采⽤了第9,10⾏的⽅法。其实第7,8⾏的代码也是可以的,只是不如9,10⾏的⾼效!如果你有更好的⽅法可以带到这个功能,请你告诉我哈!
3.性能⽅⾯,不要让std复制内存,传指针吧!
在计算⽂档相似性的时候要⽤到⼀个的⽂档向量。这个⼤向量是使⽤了std::vector来处理。在性能⽅⾯我注意到了两点。 1)使⽤reserve申请⾜够多的内存。为push_back做准备
2)使⽤push_back的时候要注意。如果在函数体内声明了⼀个vector。这个vector的size超⼤。这是你想把它push_back给类的私有成员的时候势必要复制⼤量的内存。 基于上⾯的两点我采⽤了下⾯的⽅法1 vector dv;2 pair