【发布时间】:2011-11-11 14:17:43
【问题描述】:
我无法理解以下代码的输出:
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;
}
输出:
TEST
0
为什么输出为 0,我应该怎么做才能修复它?我希望大小为 2 而不是 0。 它可能与结构的工作方式有关。我定义的两个结构如下:
typedef struct
{
string Path;
int Votes;
} Image;
typedef struct
{
int treeIndex;
float centroid;
vector<float*> features;
vector<Image> images;
} TreeNode;
请注意,我不能选择使用类而不是结构。
【问题讨论】:
-
请注意,除了默认可见性(
public/private)之外,结构和类是相同的。 -
通过副本传递与通过引用传递之美...顺便说一句,您的整个开头段落可以缩短为
vector<TreeNode> tree(50);。还有,这个怎么标为C?? -
为什么是 typedef?那是过时的旧 C 风格
-
(并且推回同一事物的重复副本可以缩短为
v.insert(v.end(), 2, image);。)程序员讨厌重复:-) -
没有“返回”。东西是“输出”。函数返回。