【问题标题】:Vector Object Invetory, Object that can store other Object types?Vector Object Inventory,可以存储其他Object类型的Object?
【发布时间】:2014-06-04 23:35:23
【问题描述】:

我正在尝试创建一个可以容纳任何对象的库存系统

例如

struct Ore{
    string name;
    int Size;
};

struct Wood{
    string name;
    int size;
    int color;
};

我的想法是创建一个具有 2 个向量的结构,一个用于数字,例如带有攻击、防御和东西的项目,另一个向量用于名称、描述或其他文本。 为不同的项目类型提供多个构造函数。

我遇到的问题是我听说向量会占用更多内存,我希望这个程序可以创建数百或数千个项目。

所以我一直在寻找有关 bettery 内存存储的任何建议。

 struct Invetory{
 vector<float> Number;
 vector<string> Word;

   Invetory(string n,float a) 
   {Word.push_back(s); Number.push_back(a)}

   Invetory(string n,float a, float b)
   {Word.push_back(s); Number.push_back(a); Number.push_back(b);}
 };

 vector<Invetory>Bag_Space;

【问题讨论】:

  • 为什么是两个向量?为什么不是类或结构对象的一个​​向量?
  • "我听说向量会占用更多的内存" - malarkey
  • 向量是最有效的数据存储方式。与数组不同,它们是动态的。
  • 那个方案似乎只会让事情变得更复杂(我什至不确定它是否工作,你怎么知道哪些单词和哪些数字一起形成一个项目?)实际上没有任何好处,甚至没有性能或内存使用。这就是你的动机?

标签: c++ object vector


【解决方案1】:

您尝试过早地进行优化。

使用最干净的东西。 vectors 不是一个疯狂的选择。 (Using arrays or std::vectors in C++, what's the performance gap?)

如果/当它出现时处理性能问题。

查看以下关于过早优化的讨论。


顺便说一句,我偶然发现了this interesting discussion on potential performance issues with vectors。总而言之,如果您的向量正在缩小,那么除非您调用swap 函数,否则内存占用不会随着向量大小而缩小。 如果你制作了很多向量并且不需要将它的元素初始化为 0,那么而不是

vector<int> bigarray(N);

试试

vector<int> bigarray;
bigarray.reserve(N);

【讨论】:

  • +1 我厌倦了那些在没有一个可行的解决方案之前就疯狂优化的人,你怎么可能在它起作用之前就知道它的瓶颈?每次我分析性能问题时,瓶颈几乎总是让我完全惊讶。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 2017-04-10
  • 2018-10-19
  • 2017-01-02
  • 1970-01-01
  • 2016-10-16
  • 2021-08-28
相关资源
最近更新 更多