私はスタックを使ってコンセプトと実装をよく理解していましたが、私は奇妙なバグに遭遇しました。文字列を関数に渡し、文字列を個々のcharに分解してスタックに追加していますが、スタックを印刷したときに入力したデータではありませんでした。突然関数の文字列が変更される
私はバグを修正しました(エラーを再現するためにコメントしました)が、なぜこのようなことが起こったのか不思議です。
#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;
}
};
私は取得しています出力:
s
t
u
v
w
x
根本原因が何であるかをコンパイラに説明させたい場合は、 'auto'を' std :: string :: iterator'に置き換えてみてください。 – user3188346