c++
1#include <iostream> 2#include <vector> 3#include <algorithm> 4 5using namespace std; 6 7struct itn { 8 int num; 9 int place; 10}; 11 12int main() { 13 14 vector<itn> array; 15 srand(unsigned(time(NULL))); 16 17 for (int i=0; i<10; i++) { 18 array.push_back({rand()%2,i}); 19 } 20 21 for (auto a : array) { 22 cout << a.place << " "<< a.num << endl; 23 } 24 25 26 for (int j=0; j<10; j++) { 27 cout << "-"; 28 } 29 30 cout << "" << endl; 31 32 /**ここのforの部分についてです。**/ 33 for (auto a = array.end(); a != --array.begin(); a--) { 34 if (a->num == 1) { 35 array.erase(a); 36 } 37 } 38 39 for (auto a : array) { 40 cout << a.place << " "<< a.num << endl; 41 } 42 43 return 0; 44} 45
##内容
itnのvector配列においてint.numが1の場合削除するというプログラムを組んでいます。元々はfor(range)で作っていたのですがeraseが使えないような内容が書かれていたため完成しませんでした。そこで、通常のforを使用して書き始めたものの色々あってエラー等が起きない形が上記の内容のようなものになりました。
##知りたいこと
・タイトル通りなぜ、このプログラムが正常に動くのか
・forでarray.begin()スタートの場合どのように書けば良いのか
・for(range)で書ける場合はどのように書けば良いのか
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。