【问题标题】:Using push_back() on a vector<vector<char>>在 vector<vector<char>> 上使用 push_back()
【发布时间】: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&lt;char&gt;(1, '_') 构造一个大小为 1 的 vector&lt;char&gt;,其单个元素初始化为 '_'。如果将 1 替换为 7,您将得到一个大小为 7 的向量,其所有元素都初始化为 '_'。但是std::vector 没有一个只取一个值并假定大小为 1 的构造函数;设计师显然认为这没有用。
  • 好吧,那就是构造函数!所以我的误解是关于vector 而不是push_back()。谢谢!
  • 也可以使用花括号,i.e.直接大括号初始化,构造内向量_board.push_back({'_'});

标签: c++ vector push-back


【解决方案1】:

_board 的值类型是std::vector&lt;char&gt;,而不是char

_board.front()的值类型是char

    _rows = 0;
    _cols = 0;
    _board.push_back(vector<char>(1, '_'));

这没有多大意义。 0x0 板中没有_

【讨论】:

  • 这是一块所有空白处都填满_的板,所以我想这是有道理的
  • @jewgah 0x0 板有 0 个空格,而不是 1 个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多