簡體   English   中英

C ++ :: vector中的vector作為另一個vector的數據類型

[英]C++::vector of vector in `struct` as data type of another vector

我正在從事與物理引擎相關的項目。 在下面的C ++代碼中:

#include <iostream>
#include <vector>

struct Vector3
{
  float x;
  float y;
  float z;
};

struct object
{
  std::vector < std::vector < Vector3 > > set_vertices;
  int ID;
  int Type;
};

class World
{
  public:
    std::vector< object > objects;

  private:
    // other members
};

int main (void)
{
  World world;

  // How to fill in "objects" of "world"?
  //   Is this safe to do?
  world.objects.resize(5);
  //   What about the way of allocating "set_vertices" below?
  for(size_t i=0; i<world.objects.size(); i++)
  {
    world.objects[i].set_vertices.resize(12, std::vector < Vector3 >(3));
    for(size_t j=0; j<world.objects[i].set_vertices.size(); j++)
    {
      for(size_t k=0; k<world.objects[i].set_vertices[j].size(); k++)
      {
        world.objects[i].set_vertices[j][k].x = 0.0f;
        world.objects[i].set_vertices[j][k].y = 0.0f;
        world.objects[i].set_vertices[j][k].z = 0.0f;
        world.objects[i].ID = i;
        world.objects[i].Type = 0;
      }
    }
  }

  return 0;
}

world objects分配內存的方式安全嗎? 會有與記憶有關的問題嗎? 有沒有更好的方法來動態初始化objects (即不在構造函數中)? 如果是這樣,怎么辦? 謝謝。

我以為使用RAII並讓object的構造函數和析構函數處理內存將是一種更好的方法。

在世界中添加一個新object您可以利用std::vector功能來動態調整大小,只需調用push_back()而無需創建以i為索引的循環。 若要避免不必要的調整大小,如果您事先知道要添加多少個元素,可以調用.reserve(n) ,其中n是要添加的元素數。

它是安全的。

如果合適,您可以通過將所有填充內容移入構造函數來節省樣板。

您也許還可以找到比嵌套向量級別更有效的方法。

因此,它是安全的,但仍可以改進。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM