如何将二维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实现
可根据使用场景选择两种实现方式:
- 只读访问(推荐):返回const引用,无拷贝开销,同时保证不会意外修改类内部数据,支持const类对象调用
const vector<vector<int>>& getmyvector() const { return vect; }
- 返回拷贝:外部拿到的是棋盘副本,修改不影响类内部数据,适合需要外部独立修改的场景
vector<vector<int>> getmyvector() { return vect; }
Setter实现
用于修改类内部的私有棋盘成员,传参用const引用避免大vector的拷贝开销:
void setmyvector(const vector<vector<int>>& vect2) { vect = vect2; }
内容的提问来源于stack exchange,提问作者Vito Metvet
相关产品推荐
相关产品推荐

