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

回答編集履歴

2

追記

2017/02/09 23:02

投稿

PineMatsu
PineMatsu

スコア3581

answer CHANGED
@@ -30,4 +30,9 @@
30
30
  transform(v1.begin(), v1.end(), v2.begin(), v1.begin(), plus<int>());
31
31
  }
32
32
  ```
33
- ただ、これなら1行で書けるので関数にする必要もなくなるという考えもあります。
33
+ ただ、これなら1行で書けるので関数にする必要もなくなるという考えもあります。
34
+
35
+
36
+ 更に追記です。
37
+
38
+ vectorはデバッグビルドだとかなり速度が遅くなります(VC++ではそうです)。なので、リリースビルドすれば高速に動作する可能性があります。

1

追記

2017/02/09 23:02

投稿

PineMatsu
PineMatsu

スコア3581

answer CHANGED
@@ -16,4 +16,18 @@
16
16
  }
17
17
  ```
18
18
  上記は2つのvectorのサイズがv1のほうがサイズが大きい場合は例外が出ると思います。サイズが違ってたら空っぽのvectorを返すとか、小さいサイズを変換の元にするなどが必要かと思います。その辺は自分なりに工夫してください。
19
- (boost.rangeを使えばtransformはもう少し簡潔に記述できます。)
19
+ (boost.rangeを使えばtransformはもう少し簡潔に記述できます。)
20
+
21
+ 戻り値を新たに返すのではなく、例えば引数のv1に返すという手もあります。そうすれば戻り値を返す時のコピーを防げます。
22
+
23
+ ```C++
24
+ #include <algorithm>
25
+
26
+ using namespace std;
27
+
28
+ void Addition(vector<int>& v1, const vector<int>& v2)
29
+ {
30
+ transform(v1.begin(), v1.end(), v2.begin(), v1.begin(), plus<int>());
31
+ }
32
+ ```
33
+ ただ、これなら1行で書けるので関数にする必要もなくなるという考えもあります。