0
我有一个问题给你。假设我有一个AwesomeData矢量,AwesomeData类包含一个AwesomeData矢量。如果我尝试访问第一个向量内的向量,它不能正常工作。据我所知这里有一个更明确的例子:向量的stange行为C++
struct AwesomeData
{
public:
AwesomeData()
: beautifulInt(3)
{}
int beautifulInt;
vector<AwesomeData> someVector;
};
int main()
{
vector<AwesomeData> tata;
AwesomeData toto;
toto.someVector.push_back(AwesomeData());
toto.someVector.push_back(AwesomeData());
toto.someVector.push_back(AwesomeData());
tata.push_back(AwesomeData());
tata.push_back(toto);
tata.push_back(AwesomeData());
// So, now tata should containt the data of someVector of toto (3 default
// AwesomeData). Instead of that, his capacity is equal to 3, but his
// size = 0. So, what's wrong ?
tata = tata[1].someVector;
}
但是,嘿,这不是全部!我发现了一个工作,但我不知道它为什么工作。
struct AwesomeData
{
public:
AwesomeData()
: beautifulInt(3)
{}
int beautifulInt;
vector<AwesomeData> someVector;
};
int main()
{
vector<AwesomeData> tata;
AwesomeData toto;
toto.someVector.push_back(AwesomeData());
toto.someVector.push_back(AwesomeData());
toto.someVector.push_back(AwesomeData());
tata.push_back(AwesomeData());
tata.push_back(toto);
tata.push_back(AwesomeData());
// If we use a second vector to temporaly stock the vector of toto,
// everything work as expected
vector<AwesomeData> tempVector;
tempVector = tata[1].someVector;
tata = tempVector;
}
那么,任何人有一个想法?
非常感谢
['tata.size()'是'3'这里](http://ideone.com/7hsoV5)。 – 2013-04-09 14:33:55
不知何故,我怀疑这是真正的原因,但是你的代码是非法的,有未定义的行为,并且无法用一些编译器进行编译。您不能创建不完整类型的矢量。 – 2013-04-09 14:34:24
@sftrabbit击败我。 – cdhowie 2013-04-09 14:34:50