回答編集履歴
1
追記
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
|
```
|