Ich spielte mit Stacks herum, um das Konzept und die Implementierung besser zu verstehen, und ich stolperte über einen seltsamen Bug. Ich übergebe eine Zeichenfolge in eine Funktion, zerlege die Zeichenfolge in einzelne Zeichen und füge sie zu einem Stapel hinzu, aber als ich den Stapel ausgedruckt habe, waren es nicht die Daten, die ich eingegeben habe.String ändert sich in der Funktion unerwartet
Ich reparierte den Fehler (Ich habe es auskommentiert, um den Fehler neu zu erstellen), aber ich bin neugierig, warum dies passierte, die Fehlschlag übereinstimmende Ausgabe war konstant und nie geändert.
#include "stack.h"
#include <string>
#include <iostream>
using namespace std;
void bracketCheck(const std::string& s){
Stack<char> stack;
// this works as expected:
/*for (auto i = s.begin(); i != s.end(); i++){
stack.push(*i);
cout << stack.top() << endl;
}*/
//this gives a jumbled outout:
for (auto i = s.front(); i != s.back(); i++){
stack.push(i);
cout << stack.top() << endl;
}
}
void main(){
string a = "stanley";
bracketCheck(a);
system("pause");
}
stack.h:
#include <list>
using namespace std;
template<class T>
class Stack{
private:
list<T> data_;
public:
Stack(){}
void push(const T& data){
//v1
data_.push_front(data);
}
T top() const{
list<T>::const_iterator it = data_.begin();
return *it;
}
};
der Ausgang ich erhalte:
s
t
u
v
w
x
Versuchen Sie, 'auto' durch' std :: string :: iterator' zu ersetzen, wenn der Compiler Ihnen erklären soll, was die Ursache ist. – user3188346