You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 10:55:08