我有一组类似于:
typedef struct {
int a;
int b;
} ITEM;
typedef struct {
int orderID;
std::vector<ITEM> items;
} ORDER;
typedef struct {
int orderSetID;
std::vector<ORDER> Orders;
} ORDER_SET;
问题是订单数量在 100,000 到 10,000,000 之间,数量ITEMS
在ORDER
1 到 500 之间。
问题是,当我构建时ORDER_SET
,我不知道会有多少 ORDER。我知道当我添加一个ORDER
有多少项目时。这里有一些问题:
1) 理想情况下,一旦我使用 Orders.resize() 为所有 ORDER 分配内存,我就可以重用内存,但似乎Orders.clear()
确实将其全部删除。
2)我从一个有点合理的订单大小开始,比如Orders.resize(500,000)
,但问题是当我遇到大量订单时,订单向量的调整大小需要永远,因为它必须复制所有ORDER.item
向量。
似乎与存储备用矩阵类似,问题是在我创建它之前我也不知道结构会有多大。
附加信息:
1)使用 Visual Studio 2008 2)正如在下面的评论中发布的那样,我能够在合理的时间内通过替换两个字段 来改进ORDER_SET
包含 10000000 个订单的构造:items
typedef struct {
int orderID;
ITEM singleItem;
std::vector<ITEM> *pItems;
} ORDER;
我将所有 pItems 放入一个单独的向量中,以便稍后删除。
现在剩下的大问题是调用似乎ORDER_SET.Orders.clear()
需要相当长的时间。我不确定为什么。
有没有像 clear() 这样的调用,它不会释放内存,而只是设置end
为begin
?一旦向量变得那么大,就没有任何理由释放内存,因为我可能再次需要它。