C++中如何在函数内修改vector?修改后无变化问题
问题根源与解决办法
你遇到的问题核心是函数参数的传递方式错误:当前take_turn函数的参数是按值传递vector<char> board,这会在函数内部创建一个原vector的副本,你修改的只是这个临时副本,原vector根本没被改动,所以调用后输出还是全空格。
解决方法一:传递引用(推荐)
把函数参数改成引用类型,这样函数直接操作原vector对象:
void take_turn(vector<char>& board) { int input; cin >> input; // 加上边界检查,避免越界访问 if (input >= 0 && input < board.size()) { board[input] = 'x'; } }
调用时直接传原vector即可:take_turn(board);
解决方法二:传递指针
也可以通过指针传递原vector的地址,函数内部通过指针操作原对象:
void take_turn(vector<char>* board) { int input; cin >> input; // 先检查指针不为空,再做边界校验 if (board != nullptr && input >= 0 && input < board->size()) { (*board)[input] = 'x'; // 或者用 board->at(input) = 'x'; 会自动触发越界异常,更安全 } }
调用时需要传递原vector的地址:take_turn(&board);
额外提示
一定要加上输入的边界检查,防止用户输入的索引超出vector的范围(比如输入负数或大于8的数),引发数组越界的未定义行为。
内容的提问来源于stack exchange,提问作者InboundMink
相关产品推荐
相关产品推荐

