使用向量时 [] 运算符的问题
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]
可以只替换为 *col
。 game[row][col]
有点棘手,您不能将 row
和 col
迭代器与 game
一起使用,因为它们来自不同的容器。您可以通过从 begin
中减去它们来将迭代器转换为数字索引,例如:other[row - other.game.begin()][col - row->begin()]
。这很难阅读,因此您最好为每个容器使用两个单独的迭代器,或者只为两个容器使用索引。
更好的解决方案是让标准库为您完成工作:
std::copy(other.game.begin(), other.game.end(), game.begin());
不需要一个一个地复制内部向量的元素,将一个向量分配给另一个向量会为您完成复制。
我正在尝试为 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]
可以只替换为 *col
。 game[row][col]
有点棘手,您不能将 row
和 col
迭代器与 game
一起使用,因为它们来自不同的容器。您可以通过从 begin
中减去它们来将迭代器转换为数字索引,例如:other[row - other.game.begin()][col - row->begin()]
。这很难阅读,因此您最好为每个容器使用两个单独的迭代器,或者只为两个容器使用索引。
更好的解决方案是让标准库为您完成工作:
std::copy(other.game.begin(), other.game.end(), game.begin());
不需要一个一个地复制内部向量的元素,将一个向量分配给另一个向量会为您完成复制。