结构是"重置"

Mad*_*sen 1 c++ struct vector

我在理解以下代码的输出时遇到一些麻烦:

int main(void)
{
    vector<TreeNode> tree;
    for(int i = 0; i < 50; i++)
    {
        TreeNode node;
        tree.push_back(node);
    }

    for(int i = 0; i < 50; i++)
    {
        Image image;
        image.Path = "TestPath";
        image.Votes = 0;

        TreeNode node = tree.at(i);
        node.images.push_back(image);
        node.images.push_back(image);
    }

    TreeNode node = tree.at(0);
    cout << "TEST" << endl;
    cout << node.images.size() << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

TEST
0
Run Code Online (Sandbox Code Playgroud)

为什么输出为0,我应该怎么做才能修复它?我希望大小为2而不是0.它可能与结构的工作方式有关.我的两个定义结构如下:

typedef struct
{
    string Path;
    int Votes;
} Image;

typedef struct
{
    int treeIndex;
    float centroid;
    vector<float*> features;
    vector<Image> images;
} TreeNode;
Run Code Online (Sandbox Code Playgroud)

请注意,我不能选择使用类而不是结构.

bad*_*err 9

vector :: at返回对象的引用.

你的路线

TreeNode node = tree.at(i);
Run Code Online (Sandbox Code Playgroud)

正在创建节点中TreeNode的副本,因此当您向其添加图像时,它会将它们添加到不在向量中的新对象.

如果你改用

TreeNode& node = tree.at(i);
Run Code Online (Sandbox Code Playgroud)

它会正确添加图像.