有没有办法在O(1)时间初始化整个动态数组?bool a[10] = {false}在静态数组的情况下有类似的东西吗?
我已经为5个元素的数组动态分配了内存,然后尝试将其元素打印到std::cout,这应该给我带来相当简单的结果。相反,我得到了其他东西,这给我带来了一些问题。
我的代码:
#include <iostream>
int main()
{
int *array = new int[5];
int array_size = sizeof(array);
for (int index = 0; index < array_size; index++) {
std::cout << array[index] << "\n";
}
std::cout << "\nThe array is " << array_size << " elements long.";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这就是结果:
0
0
0
0
0
0
132049
0
Run Code Online (Sandbox Code Playgroud)
现在,我知道这不是事情的完成方式,但是这样的结果使我有几个问题。
假设我有一个取32位整数的函数,并返回随机的32位整数.
现在,我想看看这个函数将在0到2 ^ 32-1之间的所有可能输入值上返回多少和哪些重复值.如果我有超过4gig的免费ram,我可以让这很容易,但我没有超过1gig ram.
我尝试使用4gig文件将计算值映射到磁盘上,其中一个字节表示它已经获得了多少重复,但我注意到将来我的硬盘速度将近25天的完成时间!(我不得不使用SSD,因为害怕破坏我的硬盘......)
所以,现在下一步是在RAM中计算这一切而不是根本不使用磁盘,但是在考虑如何优雅地解决这个问题时我跑到了墙上.我能想到的唯一方法是循环(2 ^ 32)*(2 ^ 32)倍的功能,但这显然比我的HDD方法慢.
我现在需要的是一些令人讨厌的想法,以加快这一点!
编辑:该函数不是一个随机函数,但类似于随机函数,但事实是你不需要知道任何关于函数的知识,这不是问题.我想通过我的眼睛看到所有重复的东西,而不仅仅是一些数学猜测可以有多少.为什么我这样做?出于好奇:)
我想知道在使用new的堆上创建的对象中的内置类型是否会被初始化为零?它是由标准强制要求还是特定于编译器?
给出以下代码:
#include <iostream>
using namespace std;
struct test
{
int _tab[1024];
};
int main()
{
test *p(new test);
for (int i = 0; i < 1024; i++)
{
cout << p->_tab[i] << endl;
}
delete p;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行时,它会打印全部为零.
我是初学者,这个问题总让我感到困惑.我的学术书说新操作员返回一个地址.但在许多教程中,我发现new返回指向特定地址的指针.拿着这个:
char *name = new char[x];
Run Code Online (Sandbox Code Playgroud)
这里为name命名了什么值,动态分配的地址或指向动态分配的char的指针?谢谢