初始化具有随机大小的std ::数组
Initialize std::array with a random size
我有两个宏:
#define length(array) sizeof(array)/sizeof(array[0])
#define randRange(x,y) x + ( std::rand() % ( y - x + 1 ) )
我可以做到这一点:
int data[] = {2, 3, 34, 10, 3, 12, 30 };
const int arr_length = length(data);
std::array<int,arr_length> data_std_array;
我可以用常数初始化:
const int arr_length = 500;
std::array<int,arr_length> data_std_array;
但是我无法使用我的兰特功能初始化std ::数组:
float a = randRange(2, 200);
const int arr_length = (int)a;
std::array<int,arr_length> data_std_array;
float a = randRange(2, 200);
int counter = 0;
for(int i =0; i < a; i++){
counter++;
}
const int arr_length = counter;
std::array<int,arr_length> data_std_array;
float a = randRange(2, 200);
const int arr_length = static_cast<int>(a);
这些都不是。
我已经尝试了各种变量,例如 size_t 和 unsigned ints , ststartants , pointers 等。我总是收到此错误消息
错误msg我总是收到的:float a = randrange(2,200(; const int arr_length = static_cast(a(;
/home/martin/Documents/github/on-line-mean-calculation/tests/test.cpp: In member function ‘virtual void algorithmTest_TestAlgorithmRandomArray_Test::TestBody()’:
/home/martin/Documents/github/on-line-mean-calculation/tests/test.cpp:87:20: error: the value of ‘arr_length’ is not usable in a constant expression
std::array<int,arr_length> data_std_array;
^
/home/martin/Documents/github/on-line-mean-calculation/tests/test.cpp:76:15: note: ‘arr_length’ was not initialized with a constant expression
const int arr_length = static_cast<int>(a);
^
/home/martin/Documents/github/on-line-mean-calculation/tests/test.cpp:87:30: error: the value of ‘arr_length’ is not usable in a constant expression
std::array<int,arr_length> data_std_array;
^
/home/martin/Documents/github/on-line-mean-calculation/tests/test.cpp:76:15: note: ‘arr_length’ was not initialized with a constant expression
const int arr_length = static_cast<int>(a);
^
/home/martin/Documents/github/on-line-mean-calculation/tests/test.cpp:87:30: note: in template argument for type ‘long unsigned int’
std::array<int,arr_length> data_std_array;
如何初始化和std数组在范围内随机长度?
no;阵列的长度必须是编译时间常数,并且std
C 库中没有编译时间随机数引擎。
如果要确定数据连续缓冲区的运行时,请使用std::vector
。它是用来的,以及它的作用。
如果您想要一个非std
随机数编译时间常数,请选择4.我使用公平的模具将其滚动。
从理论上讲,您可以使用编码代码的编译时间的宏,并基于此编写编译时间伪随机数生成器。或者,您可以使用持续的传递样式和模板代码绑定来编译一些大量k的程序,然后选择在运行时执行哪个程序。但是所有这些都是坦率的坏主意。
heck,您可以使C 程序将C 程序打印到文件中,在程序中包含C 编译器,链接到与您动态打印的程序的输出相对于您的程序。
a std::array
具有 compile time 大小。这意味着,无论您处理什么,每次运行程序时,都会创建一个具有相同数量元素的数组。如果那不是您想要的,则应查看std::vector
,它可以以运行时更改大小,因此每次运行程序时都可能不同。
无论哪种方式,除非有必要,否则您不应创建宏。有时它们是,但通常(包括在这些情况下(,它们会引起比解决的问题更多的问题,而您应该使用功能。您的length
和randRange
宏都可以更好地实现为功能,并且length
已经存在为std::size
。
运行时随机数生成
如果您想要运行时随机数,那是人们在谈论随机性时通常想要的,则应使用C 随机性库,而不是rand
函数。但是,除非您知道,否则很难使用。比大多数程序员想费心学习随机数的要多得多。我建议使用基于它易于使用的一些库,例如Randutils库。
编译时间随机数
如果出于某种原因,您要在编译时生成一个随机数,以便每次运行程序时都会获得相同的数字,但是如果重新编译,则会获得不同的数字,这在C 中是可能的11岁及以后。有一个有关此主题的C 每周视频,还有其他您可以在线找到的示例。
- 初始化具有非默认构造函数的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::数组