向量c++的奇怪行为

Stange behaviour of vector c++

本文关键字:c++ 向量      更新时间:2023-10-16

我有一个问题要问你。假设我有一个AwesomeData向量,类AwesomeData包含一个AwesomeData向量。如果我试图访问第一个向量里面的向量,它不能正常工作。我知道这不是很清楚,这里有一个更明确的例子:

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;
}

有谁知道吗?

大谢谢

标准容器不允许您使用不完整类型实例化它们。在您的示例中,当您尝试实例化std::vector<AwesomeData>时,AwesomeData没有完全定义。

要做到这一点,你可以看看boost::container库。

Boost::容器

看到