是否有任何有效的方法来获取大型向量
Is there any efficient way to get a large vector?
我需要一个内部有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_type
是std::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);
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- C++中高效的大型稀疏块压缩线性方程
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- C/C++ 从 STM32 中的另一个类获取大型数据,如 180 数组
- 是否有任何有效的方法来获取大型向量
- 在DOS 7.x中获取大型驱动器结构信息