如何修改向量内的元素

How can I modify elements inside vectors?

本文关键字:向量 元素 修改 何修改      更新时间:2023-10-16

我试图修改向量内的元素。在我更改数组中的某个块并再次显示它之后,它不会显示新的值,而是保留以前的输出。我做错了吗?

////////////////////////////////////////////////////
// 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;
            }
        }
    }
}

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';
        }
    }
}

你应该传递你的vector作为一个引用(或指针):

void updateMouse( vector< vector<char> > & maze, const int &mouse_row, const int &mouse_col ) {

否则你要做的就是改变迷宫的副本