gpt4 book ai didi

c++ - 尝试取消引用2D vector 中的元素时发生错误

转载 作者:行者123 更新时间:2023-12-01 14:53:19 25 4
gpt4 key购买 nike

这里是C++的新手。我有一个指针变量类型vector,我通过n初始化为m,其中nm的输入均为int。这是我如何初始化它。

std::vector<std::vector<int>>* memo; // This is as a member.

void test(int m, int n) {
memo = new std::vector<std::vector<int>>(m, *new std::vector<int>(n, 0)); // This is inside a method.
}

稍后,我尝试分配一个特定的元素。
int ans = 5; // In my actual code, it's something else, but I'm just simplifying it.
memo[i][j] = ans; // This gives an error.

我以为我只需要尊重它,因为现在它是一个指针类型。所以我将其更改为:
*memo[i][j] = ans;

但是现在我得到了一个新的错误:
C++ no operator matches these operands            operand types are: * std::vector<int, std::allocator<int>>

为什么这不起作用,我如何使其起作用?

最佳答案

对于初学者,此声明

std::vector<std::vector<int>>* memo;

没什么意义。最好像这样声明数据成员
std::vector<std::vector<int>> memo;

此分配
memo = new std::vector<std::vector<int>>(m, *new std::vector<int>(n, 0));

是不正确的。 vector 的元素不是指针。你应该写
memo = new std::vector<std::vector<int>>(m, std::vector<int>(n, 0)); 

要么
memo = new std::vector<std::vector<int>>(m, std::vector<int>(n ));

看来这是您遇到其他问题的原因。

要为这样的 vector 设置值,您应该编写例如
( *memo )[i][j] = ans;

如果将数据成员声明为非指针,例如
std::vector<std::vector<int>> memo;

然后在一个函数中,您可以像
memo.assign( m, std::vector<int>( n ) );

关于c++ - 尝试取消引用2D vector 中的元素时发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60763610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com