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

回答編集履歴

2

バグの修正

2017/10/15 06:02

投稿

majiponi
majiponi

スコア1722

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

バグの修正

2017/10/15 06:02

投稿

majiponi
majiponi

スコア1722

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がソート済みで、かつ範囲内に入っていないと暴走しますが、コピーするよりちょこっとだけ速いと思います(キャッシュとかの関係で)。