我不明白,为什么我的程序因此行exc_bad_access code=exc_i386_gpflt
中的错误matrix[row].push_back(cell);
而被破坏?
所以,我的代码:
#include <iostream>
#include <string>
#include <vector>
int calculate(int cell_1x1_price, int cell_1x2_price) {
if ((cell_1x1_price + cell_1x1_price) < cell_1x2_price) {
return cell_1x1_price + cell_1x1_price;
} else {
return cell_1x2_price;
}
}
int main() {
using std::cin;
using std::cout;
using std::string;
using std::vector;
int rows;
int columns;
int cell_1x2_price;
int cell_1x1_price;
cin >> rows >> columns >> cell_1x2_price >> cell_1x1_price;
vector<string> matrix;
matrix.reserve(rows);
char cell;
for (int row = 0; row < rows; ++row) {
for (int column = 0; column < columns; ++column) {
cin >> cell;
matrix[row].push_back(cell);
}
}
int sum = 0;
for (int row = 0; row < rows; ++row) {
for (int column = 0; column < columns; ++column) {
if (matrix[row][column] == '*') {
if (column + 1 < columns && matrix[row][column + 1] == '*') {
sum += calculate(cell_1x1_price, cell_1x2_price);
++column;
continue;
}
if (row + 1 < rows && matrix[row + 1][column] == '*') {
matrix[row + 1][column] = '.';
sum += calculate(cell_1x1_price, cell_1x2_price);
continue;
}
sum += cell_1x1_price;
}
}
}
cout << sum;
return 0;
}
关于程序和输入的内容:第一个字符串包括4个整数:N,M,A,B(1≤N,M≤300,A,B≤1000)。每个下一行包括M符号。符号。是一个干净的细胞,*和**很脏。
如果A的总和为**,B为*的总和,我需要找到清理总和。
答案 0 :(得分:1)
这是因为当矩阵实际上是一个空向量时,你调用matrix [row]。
对matrix.reserve(rows)的调用只会增加vector的容量,它不会向它添加任何元素。你可以使用matrix.resize(rows),或者只是将大小传递给vector的构造函数,比如
vector<string> matrix(rows);