【发布时间】:2021-03-21 22:19:41
【问题描述】:
所以我有一个类板标题如下:
class Board
{
std::vector<std::vector<char>> _board;
uint _rows;
uint _cols;
public:
Board();
}
我有这个默认构造函数:
Board::Board()
{
_rows = 0;
_cols = 0;
_board.push_back(vector<char>(1, '_'));
}
而且我就是不明白这行代码的语法:
_board.push_back(vector<char>(1, '_'));
我的意思是,它完成了它的工作:它应该在第一行的末尾添加一个“_”。但是从我读到的关于 push_back() 方法的内容中,我不明白为什么它不仅仅是
_board.push_back('_');
PS:push_back() 签名是:
void push_back (const value_type& val);
编辑:使用 board.push_back(''); 时收到的消息错误;是:
错误:没有匹配的成员函数调用“push_back”
【问题讨论】:
-
_board是向量的向量,所以你推送给它的东西必须是向量。'_'是一个字符,而不是一个向量。 -
所以里面的vector
是一个铸件?为什么这个“1”很重要?当我使用 board.push_back(vector (' ') 时不一样,为什么? -
这不是演员表,而是构造函数。
vector<char>(1, '_')构造一个大小为 1 的vector<char>,其单个元素初始化为'_'。如果将 1 替换为 7,您将得到一个大小为 7 的向量,其所有元素都初始化为'_'。但是std::vector没有一个只取一个值并假定大小为 1 的构造函数;设计师显然认为这没有用。 -
好吧,那就是构造函数!所以我的误解是关于vector
而不是push_back()。谢谢! -
也可以使用花括号,i.e.直接大括号初始化,构造内向量
_board.push_back({'_'});