C ++用结构填充2d向量

时间:2016-01-18 04:58:04

标签: c++ vector struct 2d

虽然我从未找到答案,但已经涵盖了类似的主题。 我的代码的相关摘要:

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'的成员

1 个答案:

答案 0 :(得分:0)

您的问题是您正在尝试调用结构中包含的名为push_back()的函数。由于您没有名为push_back()的成员函数,因此它会为您提供错误。这可以通过删除循环中使用的访问指定符中的第二个索引来解决。这样做是因为您尝试访问Nuerons的向量而不是Nuerons向量的成员。

e.g。

更改此内容:

n_N[i][neuronNum].push_back(Neuron());

对此:

n_N[i].push_back(Neuron());

编辑:(感谢M.M指出这一点)

上述解决方案仅在n_n [i]存在且不在向量范围之外时才起作用(这会导致未定义的行为)。要解决此问题,我建议使用以下其中一个循环。

// 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());
}