相关疑难解决方法(0)

在C/C++中用O(1)时间初始化动态数组

有没有办法在O(1)时间初始化整个动态数组?bool a[10] = {false}在静态数组的情况下有类似的东西吗?

c c++

3
推荐指数
1
解决办法
1035
查看次数

未定义行为的说明,以及是否确实未定义

我已经为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)

现在,我知道这不是事情的完成方式,但是这样的结果使我有几个问题。

  1. 为什么数组的大小是8,而不是5?本来我以2的幂为单位来表示记忆,但我有一种错的感觉。
  2. 132049是什么?

c++ arrays

2
推荐指数
1
解决办法
101
查看次数

内存不足的内存管理:查找和跟踪随机函数返回值的重复项

假设我有一个取32位整数的函数,并返回随机的32位整数.

现在,我想看看这个函数将在0到2 ^ 32-1之间的所有可能输入值上返回多少和哪些重复值.如果我有超过4gig的免费ram,我可以让这很容易,但我没有超过1gig ram.

我尝试使用4gig文件将计算值映射到磁盘上,其中一个字节表示它已经获得了多少重复,但我注意到将来我的硬盘速度将近25天的完成时间!(我不得不使用SSD,因为害怕破坏我的硬盘......)

所以,现在下一步是在RAM中计算这一切而不是根本不使用磁盘,但是在考虑如何优雅地解决这个问题时我跑到了墙上.我能想到的唯一方法是循环(2 ^ 32)*(2 ^ 32)倍的功能,但这显然比我的HDD方法慢.

我现在需要的是一些令人讨厌的想法,以加快这一点!

编辑:该函数不是一个随机函数,但类似于随机函数,但事实是你不需要知道任何关于函数的知识,这不是问题.我想通过我的眼睛看到所有重复的东西,而不仅仅是一些数学猜测可以有多少.为什么我这样做?出于好奇:)

c++ algorithm optimization memory-management

1
推荐指数
1
解决办法
140
查看次数

初始化c ++堆对象

我想知道在使用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)

运行时,它会打印全部为零.

c++ new-operator

1
推荐指数
1
解决办法
5069
查看次数

新运营商返回什么?

我是初学者,这个问题总让我感到困惑.我的学术书说新操作员返回一个地址.但在许多教程中,我发现new返回指向特定地址的指针.拿着这个:

  char *name = new char[x];
Run Code Online (Sandbox Code Playgroud)

这里为name命名了什么值,动态分配的地址或指向动态分配的char的指针?谢谢

c++ new-operator dynamic-memory-allocation

0
推荐指数
1
解决办法
1367
查看次数