回答編集履歴

4

コード修正

2020/09/21 08:20

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  struct agent a[N] = { 0 };
32
32
 
33
- + int last = N - 1;
33
+ + int last = N;
34
34
 
35
35
  //追跡店の初期分布,運動の内容など今回問題となっている箇所と関係ない部分は省略してあります.
36
36
 
@@ -38,7 +38,7 @@
38
38
 
39
39
  - for (int i = 0; i < N; ++i) { //各エージェントの計算
40
40
 
41
- + for (int i = 0; i <= last; ++i) { //各エージェントの計算
41
+ + for (int i = 0; i < last; ++i) { //各エージェントの計算
42
42
 
43
43
  if (a[i].category == 1) {
44
44
 
@@ -46,7 +46,7 @@
46
46
 
47
47
  - a.pop_back();//今回問題になっているのはここの2行です
48
48
 
49
- + a[i] = a[last--];
49
+ + a[i] = a[--last];
50
50
 
51
51
  }
52
52
 

3

コード修正

2020/09/21 08:20

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  - for (int i = 0; i < N; ++i) { //各エージェントの計算
40
40
 
41
- + for (int i = 0; i < last; ++i) { //各エージェントの計算
41
+ + for (int i = 0; i <= last; ++i) { //各エージェントの計算
42
42
 
43
43
  if (a[i].category == 1) {
44
44
 

2

コード追記

2020/09/21 08:19

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -17,3 +17,43 @@
17
17
  + for (int i = 0; i < a.size(); ++i) { //各エージェントの計算
18
18
 
19
19
  ```
20
+
21
+
22
+
23
+ ---
24
+
25
+ 末尾の要素を対象から外すだけなら、最終要素のインデックスを覚えておくだけでも良いと思いますが。
26
+
27
+ ```diff
28
+
29
+ int main(int argc, char* argv[]) {
30
+
31
+ struct agent a[N] = { 0 };
32
+
33
+ + int last = N - 1;
34
+
35
+ //追跡店の初期分布,運動の内容など今回問題となっている箇所と関係ない部分は省略してあります.
36
+
37
+ for (int T = 1; T <= TIMELIMIT; ++T) {////打ち切り時間まで計算
38
+
39
+ - for (int i = 0; i < N; ++i) { //各エージェントの計算
40
+
41
+ + for (int i = 0; i < last; ++i) { //各エージェントの計算
42
+
43
+ if (a[i].category == 1) {
44
+
45
+ - a[i] = a.back();
46
+
47
+ - a.pop_back();//今回問題になっているのはここの2行です
48
+
49
+ + a[i] = a[last--];
50
+
51
+ }
52
+
53
+ }
54
+
55
+ }
56
+
57
+ }
58
+
59
+ ```

1

指摘追加

2020/09/21 08:18

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -1,4 +1,4 @@
1
- `vector`を使用してください。
1
+ `back()`や`pop_back()`したいのであれば`vector`を使用してください。
2
2
 
3
3
  ```diff
4
4
 
@@ -7,3 +7,13 @@
7
7
  + std::vector<agent> a(N);
8
8
 
9
9
  ```
10
+
11
+ これだけでは`pop_back()`の後に範囲外アクセスが発生するので以下も修正してください。
12
+
13
+ ```diff
14
+
15
+ - for (int i = 0; i < N; ++i) { //各エージェントの計算
16
+
17
+ + for (int i = 0; i < a.size(); ++i) { //各エージェントの計算
18
+
19
+ ```