C++ 用结构填充二维向量
C++ Filling a 2d Vector with Structs
类似的主题已经涵盖,但我从未找到答案。
我的代码的相关片段:
struct Neuron
{
double weight;
};
typedef vector<Neuron> Layer;
vector<Layer> n_N; // Hopefully creating a vector of layers, which takes in neuron structs
然后我尝试在 for 循环中将神经元结构加载到 n_N 中:
n_N[i][neuronNum].push_back(Neuron);
在我的理解中,[i]是行中的数字,然后[neuronNum]是列中的数字
但我收到一个错误:'struct Neuron' 没有名为 'push_back'
的成员
您的问题是您正在尝试调用结构中包含的名为 push_back()
的函数。由于您没有名为 push_back()
的成员函数,因此它会给您带来错误。这可以通过删除循环中使用的访问指定符中的第二个索引来解决。这将起作用,因为您正在尝试访问 Nuerons
的向量而不是 Nuerons
.
的向量的成员
例如
改变这个:
n_N[i][neuronNum].push_back(Neuron());
为此:
n_N[i].push_back(Neuron());
编辑:(感谢 M.M 指出这一点)
上述解决方案仅在 n_n[i] 存在且不超出向量范围(这会导致未定义的行为)时才有效。要解决此问题,我建议使用以下 for 循环之一。
// Range based for loop. (requires c++11 or greater)
for(auto &i: n_N) {i.push_back(Neuron());)
// Standard for loop taking into account the current size of the vector.
for(size_t i = 0; i < n_N.size(); i++) {n_N[i].push_back(Neuron());}
// Iterator for loop.
for(std::vector<std::vector<Neuron> >::iterator it = v.begin(); it != v.end(); ++it) {
n_N[it].push_back(Neuron());
}
类似的主题已经涵盖,但我从未找到答案。 我的代码的相关片段:
struct Neuron
{
double weight;
};
typedef vector<Neuron> Layer;
vector<Layer> n_N; // Hopefully creating a vector of layers, which takes in neuron structs
然后我尝试在 for 循环中将神经元结构加载到 n_N 中:
n_N[i][neuronNum].push_back(Neuron);
在我的理解中,[i]是行中的数字,然后[neuronNum]是列中的数字
但我收到一个错误:'struct Neuron' 没有名为 'push_back'
的成员您的问题是您正在尝试调用结构中包含的名为 push_back()
的函数。由于您没有名为 push_back()
的成员函数,因此它会给您带来错误。这可以通过删除循环中使用的访问指定符中的第二个索引来解决。这将起作用,因为您正在尝试访问 Nuerons
的向量而不是 Nuerons
.
例如
改变这个:
n_N[i][neuronNum].push_back(Neuron());
为此:
n_N[i].push_back(Neuron());
编辑:(感谢 M.M 指出这一点)
上述解决方案仅在 n_n[i] 存在且不超出向量范围(这会导致未定义的行为)时才有效。要解决此问题,我建议使用以下 for 循环之一。
// Range based for loop. (requires c++11 or greater)
for(auto &i: n_N) {i.push_back(Neuron());)
// Standard for loop taking into account the current size of the vector.
for(size_t i = 0; i < n_N.size(); i++) {n_N[i].push_back(Neuron());}
// Iterator for loop.
for(std::vector<std::vector<Neuron> >::iterator it = v.begin(); it != v.end(); ++it) {
n_N[it].push_back(Neuron());
}