c++ - Reading data into a queue -
using following (incomplete) code, attempting insert 10 strings string queue (declared , defined further down), read contents out 1 @ time, output queue doe snot correspond expected output
int main() { ifstream file; (int count = 1; count <= 10; count ++) { string filename; stringstream ss; ss << "personlists/pl" << count << ".txt"; filename = ss.str(); waitinglistlist.add(filename); waitinglistlist.remove(filename); cout << filename << endl; waitinglistlist.add(filename); } }
the following expect code, , have verified filename
objects being constructed correctly using stringstream
seen in int main()
inserting output stream directly after line filename = ss.str()
.
personlists/pl1.txt personlists/pl2.txt personlists/pl3.txt personlists/pl4.txt personlists/pl5.txt personlists/pl6.txt personlists/pl7.txt personlists/pl8.txt personlists/pl9.txt personlists/pl10.txt
however, when print contents of queue, output receive, , unable discern pattern in file names indicate cause of this. can looking @ code here figure out what's going on? i've used same process in other parts of program, using same queue template.
personlists/pl1.txt personlists/pl1.txt personlists/pl2.txt personlists/pl1.txt personlists/pl3.txt personlists/pl2.txt personlists/pl4.txt personlists/pl1.txt personlists/pl5.txt personlists/pl3.txt
queue.h
#ifndef queue_h #define queue_h using namespace std; template <class type> class queue { private: type *contents; int front, back; int queuesize; public: queue(int queuesize = 10); ~queue(); bool empty() const; bool full() const; bool remove(type&); bool add(type&); }; #endif
queuetemplate.h
#ifndef queuetemplate_h #define queuetemplate_h #include "queue.h" using namespace std; // constructor template <class type> queue<type> :: queue(int queuesize): front(0), back(0), queuesize(queuesize), contents(new type[queuesize + 1]) {} // destructor template <class type> queue<type> :: ~queue() { delete[] contents; } // tests template <class type> bool queue<type> :: empty() const { return (front == back) ? true : false; } template <class type> bool queue<type> :: full() const { return ((1 + back) % (queuesize + 1) == front) ? true : false; } // push , pop template <class type> bool queue<type> :: remove(type& frontelement) { if (empty()) { return false; } else { frontelement = contents[front]; front = (front + 1) % (queuesize + 1); return true; } } template <class type> bool queue<type> :: add(type& newelement) { if(full()) { return false; } else { contents[back] = newelement; = (back + 1) % (queuesize + 1); return true; } } #endif
first pass: add pl1, remove pl1, add pl1. queue contains pl1.
second pass: add pl2, remove pl1 (which @ front), add pl1 (filename updated remove). queue contains pl2, pl1
third pass: add pl3, remove pl2 (which @ front), add pl2 (filename updated remove). queue contains pl1, pl3, pl2
and on....
edit: first 7 iterations
- add "pl1", remove/print "pl1", add "pl1" - queue: "pl1"
- add "pl2", remove/print "pl1", add "pl1" - queue: "pl2", "pl1"
- add "pl3", remove/print "pl2", add "pl2" - queue: "pl1", "pl3", "pl2"
- add "pl4", remove/print "pl1", add "pl1" - queue: "pl3", "pl2", "pl4", "pl1"
- add "pl5", remove/print "pl3", add "pl3" - queue: "pl2", "pl4", "pl1", "pl5", "pl3"
- add "pl6", remove/print "pl2", add "pl2" - queue: "pl4", "pl1", "pl5", "pl3", "pl6", "pl2"
- add "pl7", remove/print "pl4", add "pl4" - queue: "pl1", "pl5", "pl3", "pl6", "pl2", "pl7", "pl4"
Comments
Post a Comment