teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/04/13 15:08

投稿

episteme
episteme

スコア16612

answer CHANGED
@@ -31,4 +31,37 @@
31
31
  vec.pop_back();
32
32
  }
33
33
  }
34
+ ```
35
+ [別解]
36
+ ```C++
37
+ #include <iostream>
38
+ #include <vector>
39
+ #include <memory>
40
+
41
+ class foo {
42
+ int n_;
43
+ public:
44
+ foo(int n) : n_(n) { std::cout << " foo(" << n_ << ")\n"; }
45
+ ~foo() { std::cout << "~foo(" << n_ << ")\n"; }
46
+ int get() const { return n_; }
47
+ };
48
+
49
+ int main(){
50
+ std::vector<std::unique_ptr<foo>> vec;
51
+ for ( int i = 0; i < 10; ++i ) {
52
+ vec.push_back(std::make_unique<foo>(i));
53
+ }
54
+ std::cout << "奇数を削除\n";
55
+ for ( auto iter = vec.begin(); iter != vec.end(); ) {
56
+ if ( (*iter)->get() % 2 ) {
57
+ iter = vec.erase(iter);
58
+ } else {
59
+ ++iter;
60
+ }
61
+ }
62
+ std::cout << "残ったのを削除\n";
63
+ while ( !vec.empty() ) {
64
+ vec.pop_back();
65
+ }
66
+ }
34
67
  ```