我在理解以下代码的输出时遇到一些麻烦:
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)
请注意,我不能选择使用类而不是结构.
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)
它会正确添加图像.