C++ 向量c+的状态行为+;

C++ 向量c+的状态行为+;,c++,arrays,C++,Arrays,我有个问题要问你。假设我有一个AwesomeData向量,类AwesomeData包含一个AwesomeData向量。如果我试图访问第一个向量中的向量,它将无法正常工作。据我所知,这里还不清楚一个更明确的例子: struct AwesomeData { public: AwesomeData() : beautifulInt(3) {} int beautifulInt; vector<AwesomeData> someVector; };

我有个问题要问你。假设我有一个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
{
公众:
AwesomeData()
:美化(3)
{}
内特美容;
向量someVector;
};
int main()
{
矢量塔塔;
冬虫夏草;
toto.someVector.push_back(AwesomeData());
toto.someVector.push_back(AwesomeData());
toto.someVector.push_back(AwesomeData());
tata.push_back(AwesomeData());
塔塔。推回(托托);
tata.push_back(AwesomeData());
//所以,现在塔塔应该包含toto的某个向量的数据(默认值为3)
//相反,他的容量等于3,但他的
//大小=0。那么,怎么了?
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;
}
struct AwesomeData
{
公众:
AwesomeData()
:美化(3)
{}
内特美容;
向量someVector;
};
int main()
{
矢量塔塔;
冬虫夏草;
toto.someVector.push_back(AwesomeData());
toto.someVector.push_back(AwesomeData());
toto.someVector.push_back(AwesomeData());
tata.push_back(AwesomeData());
塔塔。推回(托托);
tata.push_back(AwesomeData());
//如果我们使用第二个向量暂时存储toto向量,
//一切正常
向量tempVector;
tempVector=tata[1]。someVector;
塔塔=温度向量;
}
有人有主意吗


非常感谢

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

时,未完全定义
AwesomeData
。不知何故,我怀疑这是实际原因,但您的代码是非法的,具有未定义的行为,并且无法使用某些编译器编译。你不能创建一个不完整类型的向量。@Rabbit抢先告诉我。另外,将自己类的向量作为成员有什么意义?整个程序设计似乎完全有缺陷。如果它有任何意义的话,它可能是指针向量或类似的向量(链表中的节点、图形等)……不知何故,我怀疑这是真正的原因,但您的代码是非法的,具有未定义的行为,并且无法使用某些编译器编译。你不能创建一个不完整类型的向量。@Rabbit抢先告诉我。另外,将自己类的向量作为成员有什么意义?整个程序设计似乎完全有缺陷。如果有意义的话,它应该是指针或类似的向量(链表中的节点、图形等)。