我试图修改向量中的元素。在我更改数组中的某个块并再次显示它之后,它不会显示新值,而是保留以前的输出。我做错了吗?
////////////////////////////////////////////////////
// This displays the array/maze
////////////////////////////////////////////////////
void displayMaze( vector< vector<char> > &maze ) {
for( int i = 0; i < ROW; i++ ) {
for( int j = 0; j < COL; j++ ) {
cout << "[" << maze[ i ][ j ] << "] ";
}
cout << endl;
}
}
////////////////////////////////////////////////////
// This is where I change a certain element
////////////////////////////////////////////////////
void updateMouse( vector< vector<char> > maze, const int &mouse_row, const int &mouse_col ) {
for( int row = 0; row < ROW; row++ ){
for( int col = 0; col < COL; col++ ) {
if( ( row == mouse_row ) && ( col == mouse_col ) ) {
maze[ row ][ col ] = 'M';
break;
}
}
}
}
答案 0 :(得分:5)
updateMouse
按值获取maze
参数。它对vector
所做的任何更改都是对函数中的本地副本进行的,当函数退出时,它将被销毁。更改函数,使其通过引用获取maze
参数。
void updateMouse( vector<vector<char>>& maze, const int &mouse_row, const int &mouse_col ) {
// ^^^
updateMouse
功能也可以简化为
void updateMouse( vector<vector<char>>& maze, int mouse_row, int mouse_col ) {
if(mouse_row < maze.size()) {
if(mouse_col < maze[mouse_row].size()) {
maze[mouse_row][mouse_col] = 'M';
}
}
}
答案 1 :(得分:1)
您应该将vector
作为参考(或指针)传递:
void updateMouse( vector< vector<char> > & maze, const int &mouse_row, const int &mouse_col ) {
否则你所做的就是改变迷宫的副本