【发布时间】:2016-08-10 13:07:34
【问题描述】:
假设我有一个想要排序的动态数组,我可以这样做
std::vector<int> v(100);
for (int i = 0; i < 100; i++) v[i] = rand();
std::sort(v.begin(), v.end());
但是对于性能关键的代码,初始化开销是不可接受的,更多细节在https://stackoverflow.com/a/7269088/3667089
我也可以
int *v = new int[100];
for (int i = 0; i < 100; i++) v[i] = rand();
std::sort(v, v + 100);
但必须自己管理内存必然会导致大型代码库中的内存泄漏。
所以看来最可行的办法是
std::unique_ptr<int[]> v(new int[100]);
for (int i = 0; i < 100; i++) v[i] = rand();
std::sort(v, v + 100);
没有初始化开销,也不需要担心内存管理,但这会返回一个长编译错误。有人可以告诉我我做错了什么吗?
我在 Ubuntu 14.04 上,GCC 作为编译器。
编辑:更改代码,使数据尚未排序
【问题讨论】:
-
std::sort(v.get(), v.get() + 100)? -
@KerrekSB 哇,真是又快又准。如果你写一个答案,我会接受它。
-
(顺便说一下,你的数据已经排序了……)
-
您分配了多少这些项目?拥有一个从预先分配的大块内存中提取的自定义分配器可以解决您的问题。请注意,您使用的 GCC 版本通常比所涉及的任何操作系统都更相关。
-
那么您要解决的真正问题是向量的快速初始化?
标签: c++ c++11 heap-memory unique-ptr