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

回答編集履歴

2

追記

2019/04/17 09:23

投稿

episteme
episteme

スコア16612

answer CHANGED
@@ -14,4 +14,22 @@
14
14
  ```
15
15
  なので解決策としては static std::vector<int> ans; しといて、
16
16
  呼ばれるたびに ans.clear(); でどうじゃろ。
17
- ※ マルチスレッドだとアレだけど。
17
+ ※ マルチスレッドだとアレだけど。
18
+
19
+ [別解]
20
+ ```C++
21
+ template<typename OutputIterator>
22
+ OutputIterator AbundantNumber(int num, OutputIterator out) {
23
+ for (int i = 1; i <= num; ++i) {
24
+ if (IsAbundantNumber(i)) {
25
+ *out++ = i;
26
+ }
27
+ }
28
+ return out;
29
+ }
30
+
31
+ // call側はたとえば:
32
+ std::vector<int> result;
33
+ AbundantNumber(5, std::back_inserter(result));
34
+ // 結果は resultに入ってる。
35
+ ```

1

加筆

2019/04/17 09:23

投稿

episteme
episteme

スコア16612

answer CHANGED
@@ -11,4 +11,7 @@
11
11
 
12
12
  return &ans.front(); // return直前にansが廃棄され、結果&ans.front() はゴミとなる。
13
13
  }
14
- ```
14
+ ```
15
+ なので解決策としては static std::vector<int> ans; しといて、
16
+ 呼ばれるたびに ans.clear(); でどうじゃろ。
17
+ ※ マルチスレッドだとアレだけど。