質問事項
AtCoderのこちらの問題について、C++で下のようなコードを書いたのですが、添え字範囲外アクセスのエラーが出ました。どの部分が添え字オーバーしているのか全く分からないので、教えていただけないでしょうか。
###期待される実行結果
入力例
3 5 aaaaa aaaaa aaaaa
出力例
####### #aaaaa# #aaaaa# #aaaaa# #######
発生している問題・エラーメッセージ
terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::at: __n (which is 0) >= this->size() (which is 0)
該当のソースコード
C++
1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 int H, W; 6 cin >> H >> W; 7 vector<string> a(H); 8 vector<string> b(H + 2); 9 for(int i = 0; i < H; i++){ 10 cin >> a.at(i); 11 } 12 for(int i = 0; i < H + 2; i++){ 13 for(int j = 0; j < W + 2; j++){ 14 (b.at(i)).at(j) = '#'; 15 } 16 } 17 for(int i = 0; i < H; i++){ 18 for(int j = 0; j < W; j++){ 19 (b.at(i + 1)).at(j + 1) = (a.at(i)).at(j); 20 } 21 } 22 for(int i = 0; i < H + 2; i++){ 23 cout << b.at(i) << endl; 24 } 25}
試したこと
このコードだとうまくいきます。
C++
1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 int H, W; 6 cin >> H >> W; 7 vector<string> a(H); 8 for(int i = 0; i < H + 2; i++){ 9 if(i == 0 || i == H + 1){ 10 for(int j = 0; j < W + 2; j++){ 11 cout << "#"; 12 } 13 }else{ 14 for(int j = 0; j < W + 2; j++){ 15 if(j == 0 || j == W + 1){ 16 cout << "#"; 17 }else{ 18 cout << (a.at(i - 1)).at(j - 1); 19 } 20 } 21 } 22 cout << endl; 23 } 24}
###補足
この部分が問題なのでしょうか...
C++
1 for(int i = 0; i < H; i++){ 2 for(int j = 0; j < W; j++){ 3 (b.at(i + 1)).at(j + 1) = (a.at(i)).at(j); 4 } 5 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/10 05:47