rotation - C++ : Why isn't my (permuted index) code printing out correctly? -


i'm walking myself though accelerated c++'s problems , first 1 i'm having sort of trouble with.

the problem code program able generate permuted index set of lines.

the code below has 2 functions: permutedindex5_1 "main()" function of sorts, , permuteline5_1 takes given line (and reference vector of permuted lines) , permutes given line rotationally, adding each rotation vector.

the problem i'm having permuted lines printing out incorrectly on stdout. i've included several 3 debug statements in permuteline5_1 test first , last strings printed, , results of print statements show should printed out, being printed out different.

my gut feeling may have me erasing iterator in function, i'm not sure how rectify it. in case, appreciated.

edit: contents of text file read :

the quick brown fox
slow brown fox
quick blue dog

#include <vector> #include <string> #include <cctype> #include <iostream> #include <fstream> #include <sstream>   using std::fstream; using std::ios; using std::istringstream; using std::vector; using std::string; using std::cin; using std::cout; using std::endl;  void permuteline5_1(vector< vector<string> >& lines, vector<string> curline) {      for(int = 0; < curline.size(); i++)     {         vector<string>::iterator curbeginstritr = curline.begin();         string curbeginstr = *curbeginstritr;          curline.erase(curbeginstritr);         curline.push_back(curbeginstr);          cout << "the first string in current line : "  + *(curline.begin()) << endl;         cout << "the first string in current line via indexing : "  + curline[0] << endl;         cout << "the last string in current line : "  + *(curline.rbegin()) << endl;          for(int j = 0; j < curline.size(); j++)         {             cout << curline[j];         }         cout << endl;          lines.push_back(curline);     }   }  void permutedindex5_1() {     vector< vector<string> > lines;      fstream filelines;     filelines.open("c:\\users\\kevin\\desktop\\lines.txt", ios::in);      string curline, curword;     vector<string> curlinevec;      while(getline(filelines, curline))     {         cout << curline << endl;          curlinevec.push_back("|");          istringstream strs(curline);          while(getline(strs, curword, ' '))         {             curlinevec.push_back(curword);             cout << curword << endl;           }          lines.push_back(curlinevec);         curlinevec.clear();     }      vector< vector<string> > permuted;      for(int = 0; < lines.size(); i++)     {         permuteline5_1(permuted, lines[i]);     }      sort(permuted.begin(), permuted.end());      /*code below prints out permutations. commented out because       permuting function not work      for(int = 0; < permuted.size(); i++)     {         vector<string> curvec = permuted[i];         for(int j = 0; j < curvec.size(); j++)         {             cout << curvec[j] << ' ';         }          cout << endl;     }*/   } 

i think iterator erasing fine, because make real copy of string first, , invalidated iterator not subsequently used.

i'd simplify permutation bit to...

for(int = 0; < curline.size(); i++) {     string curbeginstr = curline[0];      curline.erase(curline.begin());     curline.push_back(curbeginstr); 

but, think real problem in sort, , i'm bit surprised compiles:

sort(permuted.begin(), permuted.end()); 

you're trying sort vector of vectors of string - means sort algorithm needs somehow compare 2 vectors of strings determine order. think can't that, , you'll need provide custom sorting predicate perform exact comparison want.

thanks chris correction.


Comments

Popular posts from this blog

asp.net - repeatedly call AddImageUrl(url) to assemble pdf document -

java - Android recognize cell phone with keyboard or not? -

iphone - How would you achieve a LED Scrolling effect? -