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

如何将二维vector作为类私有成员实现游戏棋盘并编写对应构造与存取方法

C++ 二维vector作为Board类私有成员实现方案

原代码存在以下核心语法错误:

  • 私有成员定义语法错误:vector<vector<int>vect; 缺少右尖括号,应改为vector<vector<int>> vect;
  • 类外实现成员函数未加类作用域前缀,导致函数被识别为全局函数,无法访问类私有成员
  • main函数中二维vector初始化语法错误,不可先声明空对象后直接用{}赋值,需在声明时初始化或显式赋值

完整可运行代码

#include <iostream>
#include <vector>

using namespace std;

class board{
public:
    // 构造函数:用初始化列表初始化私有成员
    board(const vector<vector<int>>& vect2):vect(vect2){}

    // Getter:返回const引用,避免拷贝开销,支持只读访问
    const vector<vector<int>>& getmyvector() const {
        return vect;
    }

    // Setter:修改私有成员
    void setmyvector(const vector<vector<int>>& vect2) {
        vect = vect2;
    }

    // 可选:封装单格修改接口,安全性更高
    void setCell(int row, int col, int val) {
        // 内置边界判断,避免数组越界
        if (row >=0 && row < vect.size() && col >=0 && col < vect[row].size()) {
            vect[row][col] = val;
        }
    }

private:
    vector<vector<int>> vect;
};

int main()
{
    // 修正初始化语法
    vector<vector<int>> vec = {
        {0,0,1,1,2},
        {1,1,0,2,1},
        {1,1,2,2,0},
    };
    board a(vec);

    // 测试getter:打印棋盘
    const auto& board_data = a.getmyvector();
    for (const auto& row : board_data) {
        for (int val : row) {
            cout << val << " ";
        }
        cout << endl;
    }

    return 0;
}

各模块实现说明

构造函数

推荐使用成员初始化列表实现,比在函数体内赋值效率更高,无需先默认构造私有成员再赋值:

// 类内实现写法
board(const vector<vector<int>>& vect2):vect(vect2){}

// 类外实现写法
board::board(const vector<vector<int>>& vect2):vect(vect2){}

Getter实现

可根据使用场景选择两种实现方式:

  1. 只读访问(推荐):返回const引用,无拷贝开销,同时保证不会意外修改类内部数据,支持const类对象调用
const vector<vector<int>>& getmyvector() const {
    return vect;
}
  1. 返回拷贝:外部拿到的是棋盘副本,修改不影响类内部数据,适合需要外部独立修改的场景
vector<vector<int>> getmyvector() {
    return vect;
}

Setter实现

用于修改类内部的私有棋盘成员,传参用const引用避免大vector的拷贝开销:

void setmyvector(const vector<vector<int>>& vect2) {
    vect = vect2;
}

内容的提问来源于stack exchange,提问作者Vito Metvet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:36:01