[英]vector struct in vector struct in
這段代碼有什么問題?
#include <vector>
#include <iostream>
typedef struct {
float x, y, z;
} aaa;
typedef struct {
float r, g, b;
std::vector<aaa> a;
} bbb;
typedef struct {
float s, t, p;
std::vector<bbb> b;
} ccc;
int main()
{
aaa o;
std::vector<ccc> c;
c.resize(1); // its OK
c[0].b.resize(4); // its OK
c[0].b[0].a.resize(2); // ??? its allocate 4 instead of 2 but why?
c[0].b[1].a.resize(2); // its OK
c[0].b[2].a.resize(2); // its OK
c[0].b[3].a.resize(2); // its OK
o.x = 1.0f;
o.y = 0.5f;
o.z = 2.567f;
c[0].b[0].a.push_back(o);
o.x = 0.0f;
o.y = 3.4f;
o.z = 3.67f;
c[0].b[0].a.push_back(o);
std::cout << c[0].b[0].a[0].x << std::endl;
std::cout << c[0].b[0].a[0].y << std::endl;
std::cout << c[0].b[0].a[0].z << std::endl;
std::cout << c[0].b[0].a[1].x << std:: endl;
std::cout << c[0].b[0].a[1].y << std::endl;
std::cout << c[0].b[0].a[1].z << std::endl;
system("pause");
return 0;
}
這是監視窗口的輸出:
vector c: size = 1; // its OK vector b: size = 4; // its OK vector a[0]: size = 4; // ??? (4) ??? vector a[1]: size = 2; // its OK vector a[3]: size = 2; // its OK vector a[4]: size = 2; // its OK
std::vector::resize()
調整向量的大小。 因此,將其大小調整為2,然后再添加2個項目(使用push_back()
),因此大小為4。
如評論中所述,如果您使用
std::cout << "c[0].b[0].a.size() = " << c[0].b[0].a.size() << std::endl;
在代碼的不同點,您將看到適當的大小。
如果向量的當前大小小於resize()中指定的大小,則成員函數resize
會創建新元素。
成員函數push_back
將新元素附加到向量。
所以說完之后
c[0].b[0].a.resize(2);
向量a將具有兩個元素。 在這兩句話之后
c[0].b[0].a.push_back(o);
//...
c[0].b[0].a.push_back(o);
它將添加另外兩個新元素。 因此,結果向量a將具有4個元素。
如果只想包含兩個元素,則必須編寫以下內容,而不是使用push_back函數
c[0].b[0].a[0] = o;
//...
c[0].b[0].a[1] = o;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.