C++で、イテレータの使い方がよくわかりません。
以下のコードのmain()でコメントアウトした箇所をaiueo()で処理したいです。
コンパイルは通りますが、実行時エラー(Segmentation fault (コアダンプ))で落ちます。
c++
1 1 #include <iostream> 2 2 #include <vector> 3 3 #include <string> 4 4 5 5 using namespace std; 6 6 7 7 void aiueo(vector<string> *v, vector<string>::iterator itr, double tmp){ 8 8 itr = v->insert(itr - 1, to_string(tmp)); 9 9 itr = v->erase(itr + 1); 10 10 itr = v->erase(itr); 11 11 itr = v->erase(itr); 12 12 itr--; 13 13 } 14 14 15 15 int main(){ 16 16 double tmp; 17 17 18 18 vector<string> v {"2", "+", "3"}; 19 19 20 20 for(vector<string>::iterator itr = v.begin(); itr != v.end(); ++itr) { 21 21 if(*itr == "+"){ 22 22 tmp = stod(*(itr - 1)) + stod(*(itr + 1)); 23 23 24 24 //itr = v.insert(itr - 1, to_string(tmp)); 25 25 //itr = v.erase(itr + 1); 26 26 //itr = v.erase(itr); 27 27 //itr = v.erase(itr); 28 28 //itr--; 29 29 30 30 aiueo(&v, itr, tmp); 31 31 } 32 32 } 33 33 34 34 cout << v[0] << endl; 35 35 return 0; 36 36 }
どのようにしたら、いいのでしょうか。
aiueo()を使わないで、main()でコメントアウトしている箇所の処理を使うと、正常な結果として、5が出力されます。
「vector<string>::iterator」が「vector<string>::iteror」になっているので、コンパイルエラーになるかと思いますが、本当に提示されたコードであっていますか?
> コンパイルは通りますが、実行時エラー(コアダンプ)で落ちます。
そのエラーメッセージも提示してください。
そもそも論としてコンテナとイテレータ両方渡すというのは何がしたいのかわからないというか、どっちかでいいのではという思いが
>>nskydivingさん
コードを全体的に修正しました。
エラーメッセージは「Segmentation fault (コアダンプ)」でございます。
>>yumetodoさん
一般的には、コンテナとイテレータの両方を渡さないものなのでしょうか、慣れていないもので、すみません!
回答4件
あなたの回答
tips
プレビュー