如何修改向量内的元素?

时间:2014-06-27 13:12:03

标签: c++ vector elements

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

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

2 个答案:

答案 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 ) {

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