C++11标准::数组
C++11 std::array
我想使用C++11中的std::array
作为我自己类的字段。它采用两个模板参数(第一个定义数据类型,第二个定义数组大小)。
但我只知道构造函数中的第二个参数。我不熟悉C++11标准,但我认为在执行过程中不可能设置模板参数。
有std::array
的替代品吗?std::vector
可能有点太多了,因为我永远不会改变它的大小。
std::vector
是最简单的使用方法;尽管正如你所说,如果你永远不需要调整它的大小,它确实会浪费几个字节
使用new T[size]
的结果初始化的std::unique_ptr<T[]>
将是最有效的东西;它应该与指针大小相同,并且在销毁时会为您删除分配的内存。不过,它是不可复制的;如果您希望类是可复制的,则需要为它提供一个复制构造函数。它也不如std::array
和std::vector
方便,因为它没有标准容器的接口。如果你需要的话,你也许可以为它编写一个STL风格的包装器;但在这种情况下,我只会使用std::vector
。
我不熟悉C++11标准,但我认为在执行过程中不可能设置模板参数。
不能将仅在运行时已知的值作为模板参数传递。。。模板实例化创建的代码必须在编译时创建,因此它不能依赖于运行时值。
一些可能的解决方案是为一些常见的数组大小值创建模板专用化,然后创建一个可能的最大大小值。我认为这是一种效率很低的工作方式。
老实说,在您的情况下,std::vector
很可能是最好的解决方案,因为您可以简单地在向量上调用resize()
,通过动态分配使其在运行时具有正确的大小。
std::array用于在编译时静态知道大小的情况。如果直到运行时才知道,请使用std::vector。如果你不调整它的大小,就不会有太多的开销。
class Container
{
vector<T> v;
Container(int i) : v(i) { v.shrink_to_fit(); }
};
如果你担心空间:
http://en.cppreference.com/w/cpp/container/vector/shrink_to_fit
不确定是否有方法构建已经三聚的载体。标准似乎并不要求它被构造为三聚体,尽管在实践中许多实现都会这样做。
BTW您还可以使用vector(size_t N,t t)构造一个向量,该向量将把每个初始元素设置为t(如果没有此选项,则默认构造元素)。
如果直到运行时才知道数组的大小,那么您需要使用std::vector。
- 将值插入到标准 c++ 数组的正确索引(升序)中
- 效率:标准::数组与标准::矢量
- 多维标准::数组的可变参数模板
- 如何将临时数组传递给标准 C++17 中的函数
- 声明后,gcc 的动态大小数组是否与标准数组有效相同?
- 如何初始化一个标准::字符串数组?
- C++填充多维标准::数组
- 如何声明 2D 标准::数组
- 如何查找 2d 标准::数组中的列数
- 如何使用数组查找标准偏差
- 将积分类型的数组作为另一个不相关的积分类型的阵列进行访问的安全且符合标准的方法
- 如何将 C 数组转换为标准::initializer_list?
- 基于多维标准::数组的范围
- 两个标准::数组的交叉部分
- 如何按降序对标准数组进行排序 - C++ 11.
- 优雅地声明 2 维(甚至多维)标准::数组
- 如何将标准::数组转换为标准::元组?
- 此代码中的数组初始化样式是什么?这是标准的吗?
- 获取别名标准::数组的大小
- 标准对 char 数组作为模板参数有什么看法?