矢量与动态阵列,它在速度上有很大的不同吗?

时间:2011-10-07 16:45:46

标签: c++

现在我正在编写一些解决车辆路径问题的代码。为此,一个重要的决定是选择如何编码解决方案。解决方案包含多条路线,每条路线一条。每条路线都有客户来访顺序,路线负荷,路线长度。 要对解决方案的信息进行修改,我还需要快速找到一些信息。

例如,
客户在哪条路线?
客户做什么路线? 路线中有多少个节点?
节点前面或后面有哪些节点?

现在,我正在考虑使用以下结构来保持解决方案。

struct Sol
{
    vector<short> nextNode;   // show what is the next node of each node;
    vector<short> preNode;    //show what is the preceding node
    vector<short> startNode; 
    vector<short> rutNum;
    vector<short> rutLoad;
    vector<float> rutLength;
    vector<short> rutSize;
};

每个向量的通用大小取决于实例,介于200-2000之间。

我听说可以使用动态数组来完成这项工作。但在我看来,动态数组更复杂。一个人必须找到内存并释放内存。在这里,我的问题是双重的。

如何使用动态数组实现相同的目的?如何定义结构或类,以便可以轻松处理内存位置和释放?

使用动态数组会比使用矢量更快吗?假设解决方案结构需要访问数百万次。

3 个答案:

答案 0 :(得分:6)

你不太可能在动态数组和向量之间看到明显的性能差异,因为后者基本上是围绕前者的非常薄的包装器。另外请注意,使用vector会明显减少错误。

然而,可能的情况是,一些信息最好完全存储在不同类型的容器中,例如,在std::map中。以下可能是您感兴趣的:What are the complexity guarantees of the standard containers?

重要的是要考虑使用的容器类型。但是,当涉及微优化(例如向量与动态数组)时,最好的策略是首先对代码进行分析,而只关注那些证明是真实的 - 而不是假设 - 代码的部分代码。 / p>

答案 1 :(得分:1)

矢量的代码很可能比你自己编写的动态数组代码更好,更高效。只有在分析显示在vector中花费大量时间时,我才会考虑编写自己的容易出错的替换。另请参阅Dynamically allocated arrays or std::vector

答案 2 :(得分:0)

我正在使用MSVC,并且实现看起来尽可能快。

通过operator []访问数组是:

return (*(this->_Myfirst + _Pos));

与动态内存一样快。

你要获得的唯一开销是在向量的内存使用中,它似乎创建了一个指向向量开始,向量结束和当前序列结束的指针。如果您使用动态数组,这只是您需要的2个指针。你只创造了200-2000这些,我怀疑记忆会变得那么紧张。

我确信其他stl实现非常相似。我会吸收矢量存储的次要成本,并在项目中使用它们。