C ++向量比我的动态数组慢
c++ vector is slower than my dynamic array?
我写了自己的动态数组。 它不完整,我把它写成一种实践。但是当我完成 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()移动内容。此外,您的测量在很大程度上是无效的;为了获得准确的比较,您需要重复执行该操作并除法以获得平均时间(并使用足够的迭代来忽略任何噪音)。此外,为了准确比较,您需要针对优化版本进行编译/链接(可能有一个调试版本故意变慢,但提供了额外的检查,您可能无意中使用了这些检查)。
相关文章:
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 输出没有重复元素的动态数组(收缩数组)C++
- 正在插入动态数组
- 如何在动态数组上使用搜索函数
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 静态数组的自由动态数组
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么 c++ 动态数组的大小没有改变?
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 指针的 C++ 动态数组 - 何时需要使用它?
- 删除动态数组时未定义标识符
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 动态数组的 C++ 重载加运算符
- 基于数组的列表 - 动态数组创建时出错