+ it = vec.begin();
+
+ while ( it != vec.end() ) {
+ j = rank;
+ oldit = it;
+ if (!equalvalue(*it, *it+1)) { *it->rank = rank; rank++; it++; }
+ else {
+ while(equalrank(*it, *it+1)) {
+ j = j + (j+1.0);
+ rank++;
+ it++;
+ }
+ numRanks = double (distance(oldit, it));
+ avgRank = j / numRanks;
+ while(oldit != it) {
+ *oldit->rank = avgRank;
+ oldit++;
+ }
+ }