【发布时间】:2013-05-18 12:53:59
【问题描述】:
我在使用矢量时遇到了一点问题。据我了解,push_back() 将复制参数并将副本插入向量中。
struct BridgeData
{
string name;
string type;
};
对于像我这样的简单聚合类,应该通过复制两个字段来复制对象。
for ( int i = 0; i<len; i++)
{
BridgeData data = {grp.get(1+i).asString().c_str()};
v.push_back(data);
cout << v[i].name << endl;
}
vector<BridgeData> &v.
当我打印data.name 时,我得到了我在花括号列表中使用的值,但是当我打印v[i].name 时,该字段似乎为空...此类聚合类的默认副本“构造函数”是否默认初始化所有字段?
编辑:
如果这还不够,这里还有更多代码。我有一个包含数据成员vector<BridgeData> yarpGroups 的类。然后我将它作为来自同一类的方法体中的引用传递:readBridgeDataVector(bGeneral,"yarpgroups",yarpGroups,numberOfYarpGroups);。
请忽略其他论点,因为它们无关紧要(我确信)。
较早的片段来自此函数:
void readBridgeDataVector(Bottle &rf, string name, vector<BridgeData> &v, int len)
{
v.resize(len);
if(rf.check(name.c_str()))
{
Bottle &grp = rf.findGroup(name.c_str());
for ( int i = 0; i<len; i++)
{
BridgeData data = {grp.get(1+i).asString().c_str(),"float"};
v.push_back(data);
cout << v[0].name << endl;
}
}
else
{
cout << "Could not find parameters for " << name << ". "
<< "Setting everything to null by default" << endl;
}
}
【问题讨论】:
-
我看到你有对向量的引用。也许索引与您的 push_back 调用不匹配? (输入时不是空的?)
-
不,我很确定您正在尝试做的事情应该有效。您将不得不发布更多代码/最少的复制。
-
您在构造矢量时是否提供了尺寸?
-
确实,向量是从另一个函数传递过来的。这个片段来自一个函数,其目标是
push_back元素。 -
如果向量中已有数据,您的新项目将位于位置 N 但您将打印出位置 0 的值 - 这是您的问题吗?尝试打印出 v.back().name。
标签: c++ vector struct aggregate push-back