使用向量时 [] 运算符的问题

problem with [] operator when using a vector

我正在尝试为 Game 创建一个复制构造函数。在整个复制构造函数中,我必须将一个游戏的元素复制到另一个游戏中。但是,当我尝试访问我想复制的游戏的内部元素时,我收到一条错误消息:

no operator "[]" matches these operands -- operand types are: mtm::Game [ std::_Vector_const_iterator<std::_Vector_val<std::conditional_t<true, std::_Simple_types<std::vector<char, std::allocator<char>>>, std::_Vec_iter_types<std::vector<char, std::allocator<char>>, size_t, ptrdiff_t, std::vector<char, std::allocator<char>> *, const std::vector<char, std::allocator<char>> *, std::vector<char, std::allocator<char>> &, const std::vector<char, std::allocator<char>> &>>>> ]C/C++(349)

对于解释 [] 运算符为何不起作用的任何帮助,我将不胜感激,这是我编写的代码片段:

Game::Game(const Game& other)
{
    Game game(other.height, other.width);

    for (vector<vector<char>>::const_iterator row = other.game.begin(); row != 
                                                              other.game.end(); row++)
    {
        for(vector<char>::const_iterator col = row->begin(); col != row->end(); col++)
        {                
            game[row][col] = other[row][col];  ///////???
        }
    }

除此之外,我想问一下是使用“new”分配游戏更好还是像我在上面的代码段中那样声明它更好。

[] operator of a vector 需要一个 size_t 参数。您正在传递一个迭代器,这就是它无法编译的原因。

other[row][col] 可以只替换为 *colgame[row][col] 有点棘手,您不能将 rowcol 迭代器与 game 一起使用,因为它们来自不同的容器。您可以通过从 begin 中减去它们来将迭代器转换为数字索引,例如:other[row - other.game.begin()][col - row->begin()]。这很难阅读,因此您最好为每个容器使用两个单独的迭代器,或者只为两个容器使用索引。

更好的解决方案是让标准库为您完成工作:

std::copy(other.game.begin(), other.game.end(), game.begin());

不需要一个一个地复制内部向量的元素,将一个向量分配给另一个向量会为您完成复制。