我有一个问题要问你。假设我有一个 AwesomeData vector ,AwesomeData 类包含一个 AwesomeData vector 。如果我尝试访问第一个 vector 中的 vector ,它无法正常工作。据我所知,这里并不清楚一个更明确的例子:
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;
}
所以有人有想法吗?
非常感谢
最佳答案
标准容器不允许您使用不完整的类型实例化它们。在你的例子中 AwesomeData
当您尝试实例化 std::vector<AwesomeData>
时未完全定义.
要实现这一点,您可以查看 boost::container
图书馆。
关于c++ - vector c++ 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15904716/