正在初始化函数内部的std::数组
Initializing std::array inside a function
我想创建一个调整堆栈大小的函数。它将根据max的值创建一个大小较大或较小的新数组,然后将元素复制到该新数组中。
void resize(const int& max) {
std::array<Item, max> temp;
for (int i = 0; i < n; i++) {
temp.at(i) = a.at(i);
}
a = temp;
}
我知道这不会运行,因为max不是一个常量表达式。我完全不知道如何传递一个常量int值。我试过了:
void resize(constexpr int&max)//编译器表示无法使int arg constexpr
我不想做constexpr void resize,因为我不需要在编译时对函数求值,而且它无论如何都不起作用。
注意:我知道如果我使用std::vector,这可能会更容易,因为它是可调整大小的,但我想尝试使用std::array进行实验。
我该怎么办?
我认为您弄错了编译时常数和运行时常数。不能以这种方式使用std::array
。您想要一个大小不是编译时常数的容器,它将是std::vector
。
如果您希望容器的大小在整个运行时保持不变,您可以依靠自律(即:不要使用push_back()
或resize()
等),也可以编写一个包装类(即,一个以std::vector
为成员的类),并仔细选择该类的方法,永远不要调整向量的大小。
你也可以使用dyarray,但它已经被c++11(和c++14,如果我记得正确的话)拒绝了
PS:把你的方法命名为resize()
,然后说你想要恒定大小的数组,这很奇怪。)你确实意识到,如果你调用这个方法,你确实在运行时改变了数组的大小,在这种情况下,为什么不使用std::vector并完成它呢?
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- 输入std::数组时出现问题
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- C++如何生成std::数组列表
- 捕获lambda中的std::数组
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- std::数组边界检查如何工作?
- 通过unique_ptr访问std::数组
- 初始化 std::数组 of Eigen::Map
- 传递 std::数组变量作为参数
- 在带有模板的函数中传递未知大小的 std::数组.如何更正此代码?
- 如何将 std::find() 与 2d std: 数组一起使用?
- std::数组派生类聚合初始化
- 在std::数组内部使用时,无法从std::函数构造类
- 使用从1到N的数字初始化std数组模板参数
- 正在声明多维std::数组
- 使用std::index_sequence对std::数组初始化进行包扩展
- 使用 std::type T 的数组来构造可从 T 构造的 std::数组
- 从 std::数组创建十六进制代表
- 使用默认值初始化 std::数组