C ++向量比我的动态数组慢

c++ vector is slower than my dynamic array?

本文关键字:动态 数组 我的 向量      更新时间:2023-10-16

我写了自己的动态数组。 它不完整,我把它写成一种实践。但是当我完成 add 函数时,我想测试我自己的动态数组类的性能,我看到了一些奇怪的结果。我的动态数组比 stl 的向量快得多。速度快了7倍!

这是我的代码:

#include<iostream>
#include<vector>
#include<Windows.h>
using namespace std;
template<class T>
class DynArray
{
public:
    DynArray()
    {
        arr = new T[2];
        capacity = 2;
        size = 0;
    }
    void Add(T value)
    {
        if(size < capacity)
        {
            arr[size++] = value;
        }
        else
        {
            T* tempArr = arr;
            arr = new T[capacity*2];
            memcpy(arr,tempArr,capacity*sizeof(T));
            capacity = capacity*2;
            delete[] tempArr;
            arr[size++] = value;
        }
    }
    int GetCapacity()
    {
        return capacity;
    }
    T operator [] (int index)
    {
        return arr[index];
    }
    ~DynArray()
    {
        delete[] arr;
    }
private:
    T* arr;
    int capacity;
    int size;
};
void main()
{
    int c;
    cin >> c;
    DynArray<int> d;
    int a = GetTickCount();
    for(int i = 0;i < c;i++)
        d.Add(i);
    cout << "n" << GetTickCount() - a << "nn";
    vector<int> v;
    a = GetTickCount();
    for(int i = 0;i < c;i++)
        v.push_back(i);

    cout << "n" << GetTickCount() - a << 'n';
    cout << d.GetCapacity() << ',' << v.capacity() << "nn";
    system("pause");
}

我想知道为什么我的动态数组更快?例如,向向量添加一百万个项目大约需要 1000 毫秒,而我的动态数组不到 150 毫秒!

提前谢谢。

编辑:不要查看代码。这只是一些练习。我只是想知道为什么它比矢量快。

那是因为你的数组坏了。您正在使用绕过运算符=的memcpy()移动内容。此外,您的测量在很大程度上是无效的;为了获得准确的比较,您需要重复执行该操作并除法以获得平均时间(并使用足够的迭代来忽略任何噪音)。此外,为了准确比较,您需要针对优化版本进行编译/链接(可能有一个调试版本故意变慢,但提供了额外的检查,您可能无意中使用了这些检查)。