C++ 向量c+的状态行为+;
我有个问题要问你。假设我有一个AwesomeData向量,类AwesomeData包含一个AwesomeData向量。如果我试图访问第一个向量中的向量,它将无法正常工作。据我所知,这里还不清楚一个更明确的例子:C++ 向量c+的状态行为+;,c++,arrays,C++,Arrays,我有个问题要问你。假设我有一个AwesomeData向量,类AwesomeData包含一个AwesomeData向量。如果我试图访问第一个向量中的向量,它将无法正常工作。据我所知,这里还不清楚一个更明确的例子: struct AwesomeData { public: AwesomeData() : beautifulInt(3) {} int beautifulInt; vector<AwesomeData> 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());
// 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抢先告诉我。另外,将自己类的向量作为成员有什么意义?整个程序设计似乎完全有缺陷。如果有意义的话,它应该是指针或类似的向量(链表中的节点、图形等)。