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

回答編集履歴

4

コード修正

2020/09/21 08:20

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -14,15 +14,15 @@
14
14
  ```diff
15
15
  int main(int argc, char* argv[]) {
16
16
  struct agent a[N] = { 0 };
17
- + int last = N - 1;
17
+ + int last = N;
18
18
  //追跡店の初期分布,運動の内容など今回問題となっている箇所と関係ない部分は省略してあります.
19
19
  for (int T = 1; T <= TIMELIMIT; ++T) {////打ち切り時間まで計算
20
20
  - for (int i = 0; i < N; ++i) { //各エージェントの計算
21
- + for (int i = 0; i <= last; ++i) { //各エージェントの計算
21
+ + for (int i = 0; i < last; ++i) { //各エージェントの計算
22
22
  if (a[i].category == 1) {
23
23
  - a[i] = a.back();
24
24
  - a.pop_back();//今回問題になっているのはここの2行です
25
- + a[i] = a[last--];
25
+ + a[i] = a[--last];
26
26
  }
27
27
  }
28
28
  }

3

コード修正

2020/09/21 08:20

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  //追跡店の初期分布,運動の内容など今回問題となっている箇所と関係ない部分は省略してあります.
19
19
  for (int T = 1; T <= TIMELIMIT; ++T) {////打ち切り時間まで計算
20
20
  - for (int i = 0; i < N; ++i) { //各エージェントの計算
21
- + for (int i = 0; i < last; ++i) { //各エージェントの計算
21
+ + for (int i = 0; i <= last; ++i) { //各エージェントの計算
22
22
  if (a[i].category == 1) {
23
23
  - a[i] = a.back();
24
24
  - a.pop_back();//今回問題になっているのはここの2行です

2

コード追記

2020/09/21 08:19

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -7,4 +7,24 @@
7
7
  ```diff
8
8
  - for (int i = 0; i < N; ++i) { //各エージェントの計算
9
9
  + for (int i = 0; i < a.size(); ++i) { //各エージェントの計算
10
+ ```
11
+
12
+ ---
13
+ 末尾の要素を対象から外すだけなら、最終要素のインデックスを覚えておくだけでも良いと思いますが。
14
+ ```diff
15
+ int main(int argc, char* argv[]) {
16
+ struct agent a[N] = { 0 };
17
+ + int last = N - 1;
18
+ //追跡店の初期分布,運動の内容など今回問題となっている箇所と関係ない部分は省略してあります.
19
+ for (int T = 1; T <= TIMELIMIT; ++T) {////打ち切り時間まで計算
20
+ - for (int i = 0; i < N; ++i) { //各エージェントの計算
21
+ + for (int i = 0; i < last; ++i) { //各エージェントの計算
22
+ if (a[i].category == 1) {
23
+ - a[i] = a.back();
24
+ - a.pop_back();//今回問題になっているのはここの2行です
25
+ + a[i] = a[last--];
26
+ }
27
+ }
28
+ }
29
+ }
10
30
  ```

1

指摘追加

2020/09/21 08:18

投稿

SHOMI
SHOMI

スコア4079

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