是否有任何有效的方法来获取大型向量

Is there any efficient way to get a large vector?

本文关键字:获取 大型 向量 方法 任何 有效 是否      更新时间:2023-10-16

我需要一个内部有n个元素的向量(我的意思是大小而不是向量的容量是n),但不想在创建过程中初始化它们,因为那只是垃圾大部头书。有没有有效的方法来实现这一目标?

编辑:我所能想象的就是使用储备金(n),并做一些黑客(可以告诉我如何)使矢量相信它具有n个元素。或者,我只是跳入污水馆,与Malloc一起跳舞并自由。

当您使用size参数构造向量(并且不要指定要复制到向量中的元素)时,元素将进行 value-Initialized 。价值初始化的规则(8.5p7)指定原始数为零。

唯一的方法是将您的原始性包裹在定义no-op默认构造函数的类类型中:

template<typename T>
struct A {
    A() {};
    T value;
};
std::vector<A<int>> vec(1000);

如果您可以将初始化过程封装为迭代器,则可以使用迭代器来构造向量:

std::vector<int> vec(it_begin, it_end);

否则,我建议不要过多担心初始化的开销;它不会改变您的算法的复杂性(因为无论如何您都将访问每个成员,这已经使其已经成为O(n))。

您可以使用construct成员是no-op的分配器。微不足道的默认构造类型。请注意这需要*,您可能需要配置和/或检查生成的代码以确保它值得。

*:假设vector_typestd::vector的专业化,它使用了这种分配器,则vector_type v(42); auto copy = v;会导致copy读取 v的读取元素,该元素具有未指定的值。这很容易出错。

使用std :: vector ::储备:

std::vector big_vec();
big_vec.reserve(100000);
 int zeros[n*size(int)/size(T)];
 vector<T> big((T*)myints, (T*)myints + n);