回答編集履歴
2
バグの修正
answer
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
```C++
|
2
2
|
#include <vector>
|
3
|
+
#include <utility>
|
3
4
|
|
4
5
|
template <typename T, typename N>
|
5
6
|
void sliding_erace_vector(std::vector<T> &target, const std::vector<N> &indexes)
|
@@ -12,7 +13,7 @@
|
|
12
13
|
|
13
14
|
for(auto i = *skip; skip != indexes.end(); i++, src++){
|
14
15
|
if(i != *skip){
|
15
|
-
*dest = *src;
|
16
|
+
*dest = std::move(*src);
|
16
17
|
dest++;
|
17
18
|
}
|
18
19
|
else{
|
@@ -20,7 +21,7 @@
|
|
20
21
|
}
|
21
22
|
}
|
22
23
|
for(; src != target.end(); src++, dest++){
|
23
|
-
*dest = *src;
|
24
|
+
*dest = std::move(*src);
|
24
25
|
}
|
25
26
|
target.resize(target.size() - indexes.size());
|
26
27
|
}
|
1
バグの修正
answer
CHANGED
@@ -22,6 +22,7 @@
|
|
22
22
|
for(; src != target.end(); src++, dest++){
|
23
23
|
*dest = *src;
|
24
24
|
}
|
25
|
+
target.resize(target.size() - indexes.size());
|
25
26
|
}
|
26
27
|
```
|
27
28
|
私はこんな感じで、元の配列の内部でスライドさせていくことを考えました。削除する要素のindexがソート済みで、かつ範囲内に入っていないと暴走しますが、コピーするよりちょこっとだけ速いと思います(キャッシュとかの関係で)。
|