?
Michael E. schrieb:
Lass dich bitte nicht von dem Unregistrierten bequasseln und benutze std::queue.
http://cppreference.com/cppqueue/queue_constructor.html
Ich sehe grundsätzlich schon ein, dass es wenig sinnvoll ist das Rad neu zu erfinden. Nachdem ich mir diesen Queue-Container mal angesehen habe, muss ich sagen, dass dieses Teil hier acuh tatsächlich wahnisinnig gelegen kommt.
Aber, die STL ist leider niergends so wirklich einfach erklärt, weshalb ich ganz einfach halb so lange habe um eine eigene Klasse zu schreiben. (Ausserdem mache ich das ja auch nicht kommerziell; will heissen, es darf auch mal "nur funktionieren" und halt hässlichst aussehen bei mir.)
Mit diesem queue hab ich's übrigens wie folgt hinbekommen:
#include <iostream>
#include <cstdio>
#include <string>
#include <fstream>
#include <queue>
void suche_artikel(std::string _dateiname,unsigned long _artikel_pro_block){
std::string suchen;
std::cin>>suchen;
getchar();
std::ifstream datenbank;
datenbank.open(_dateiname.c_str(),std::ios_base::in);
std::string name;
std::queue<std::string> stack;
for(unsigned long zeile=1;getline(datenbank,name);++zeile){
stack.push(name);
if(name.find(suchen,0)!=-1){
std::queue<std::string> pushed_stack=stack;
unsigned long element_nr=(zeile%_artikel_pro_block);
if(element_nr==0)
element_nr=4;
while(stack.size()>element_nr)
stack.pop();
while(stack.size()>0){
std::cout<<std::endl<<stack.front();
stack.pop();
}
stack=pushed_stack;
while(++element_nr<=_artikel_pro_block){
getline(datenbank,name);
stack.push(name);
std::cout<<std::endl<<name;
++zeile;
}
std::cout<<std::endl;
}
}
datenbank.close();
}