[英]Pointer confusion causing "no matching function call for std::vector"?
我有一个 C++ class 有一个数据成员:
private:
std::vector<std::vector<int>> *edges;
然后在我的构造函数中,我执行以下操作:
//rows and columns are dynamically set in constructor
edges = new vector<vector<int> >(rows*columns, vector<int>());
edges[0].push_back(1);
运行我的程序时,我得到
error: no matching function for call to std::vector<std::vector<int> >::push_back(int)
edges[0].push_back(1);
^
我只知道这与指针/引用有关,但我对 C++ 的经验不够,无法弄清楚,而且这个错误消息感觉很模糊。 有人知道这两行有什么问题吗?
EDIT1:我还尝试将数据成员更改为 object (不是指针)并这样做,但现在我的程序只是停滞不前
for (int i = 0; i < (rows*columns); i++) {
vector<int> neighbors;
edges.push_back(neighbors);
}
EDIT2:我也尝试使用 paxdiablo 的答案,但现在这条线抛出了 bad_alloc
edges = new vector<vector<int> >(rows*columns, vector<int>());
这是加载二维向量的示例:
std::vector<std::vector<int>> board;
for (int row = 0; row < 4; ++row)
{
std::vector<int> row;
for (int column = 0; column < 4; ++column)
{
row.push_back((row * 4) + column);
}
board.push_back(row);
}
上面的代码初始化了一个二维数组,4x4,每个槽/正方形都有一个唯一的数字。
内部循环初始化一个“行”向量。
“行”向量初始化后,“推回”到“板”向量。
edge 是一个指针,因此edges
edges[0]
实际上是外部向量,您不能将 append 和 integer 指向向量的向量。
你需要的是这样的:
(*edges)[0].push_back(1);
取消引用为您提供外部向量,然后[0]
为您提供第一个内部向量,您可以append 和 integer 到。
还有其他方法可以做到这一点,但这里的目的是简单地解释正在发生的事情。
具体来说,最好在 class 中声明向量而不是指向向量的指针。 这样,您可以在构建过程中自动获得它,而不必担心手动分配(或解除分配)它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.