相关疑难解决方法(0)

如何在c ++中删除此2D数组

在简单的一维数组中:

node *nodes =  new node[MAX_NODES];
Run Code Online (Sandbox Code Playgroud)

删除:

delete [] nodes;
Run Code Online (Sandbox Code Playgroud)

删除数组中分配的所有节点.

但在这种情况下:

float (*buildingArray)[3] = new float[10][3];
Run Code Online (Sandbox Code Playgroud)

这个语句是否buildingArray包含3个浮点指针的单维数组?这是解除分配线:

delete[] buildingArray;
Run Code Online (Sandbox Code Playgroud)

以上是否释放delete了数组,但我怀疑它是否会删除它的引用?

c++ pointers memory-management

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

在C++中实现hash-table

以下是使用C++实现哈希表.你能帮我理解一下HashEntry **table是什么吗?为什么它被声明为双指针?它是一个数组,数组的每个值是HashEntry

  class HashEntry {
    private:
          int key;
          int value;
    public:
          HashEntry(int key, int value) {
                this->key = key;
                this->value = value;
          }

          int getKey() {
                return key;
          }

          int getValue() {
                return value;
          }
    };

    const int TABLE_SIZE = 128;






    class HashMap {
    private:
          HashEntry **table;
    public:
          HashMap() {
                table = new HashEntry*[TABLE_SIZE];
                for (int i = 0; i < TABLE_SIZE; i++)
                      table[i] = NULL;
          }

          int get(int key) {
                int hash = (key % …
Run Code Online (Sandbox Code Playgroud)

c++ hash hashtable hashmap

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

我如何为2D阵列分配内存?

如何使用'new'运算符声明二维数组?我的书说:

int (*p)[4];
p=new[3][4];
Run Code Online (Sandbox Code Playgroud)

但这对我没有意义.p是一个指向4个整数数组的指针,那怎么能指向一个二维数组呢?

c++ arrays new-operator dynamic-arrays

4
推荐指数
3
解决办法
2万
查看次数

使用memcpy复制2D数组?

所以我想将2D数组的内容复制到完全相同类型的另一个数组.以下是创建数组的方式:

 GridUnit** newGrid;
 newGrid = new GridUnit*[width];
    for (int i = 0; i < width; i++)
        newGrid[i] = new GridUnit[height];
Run Code Online (Sandbox Code Playgroud)

GridUnit的大小为16(4个浮点数).因此,所有初始化都没有问题,因为在运行for循环实际用一些数据填充值之后使用它没有问题.现在我要做的是将另一个数组的内容复制到这个数组中(如果可能,不使用for循环).这是我到目前为止一直在尝试做的事情:

 memcpy(&newGrid, &grid, height * width * 16);
Run Code Online (Sandbox Code Playgroud)

'grid'在大小和类型方面与'newGrid'相同.但是,这不起作用.我知道memcpy可能不正确,但是尝试了多种不同的设置,我不知道它出了什么问题,所以任何帮助都会受到欢迎!

c++ arrays memcpy

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

矩阵乘法的矩阵乘法优化

我正在进行一项任务,我转换矩阵以减少矩阵乘法运算的缓存未命中.根据我对几个同学的理解,我应该得到8倍的提升.但是,我只得到2倍......我可能做错了什么?

GitHub上的完整资源

void transpose(int size, matrix m) {
    int i, j;
    for (i = 0; i < size; i++) 
        for (j = 0; j < size; j++) 
            std::swap(m.element[i][j], m.element[j][i]);
}

void mm(matrix a, matrix b, matrix result) {
    int i, j, k;
    int size = a.size;
    long long before, after;

    before = wall_clock_time();
    // Do the multiplication
    transpose(size, b); // transpose the matrix to reduce cache miss
    for (i = 0; i < size; i++)
        for (j = 0; j …
Run Code Online (Sandbox Code Playgroud)

c c++ algorithm optimization matrix-multiplication

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

如何使用用户输入的值声明(多维)数组?

我们在学校教的是这样的:

int x;
cin >> x;
int array[x];
Run Code Online (Sandbox Code Playgroud)

要么

int x, y;
cin >> x >> y;
int array[x][y];
Run Code Online (Sandbox Code Playgroud)

但是,我知道它在C++中是无效的代码.但即使它是,它仍然可以完成工作并且按预期工作,但是,我想找到它如何正确完成的答案?

c++ arrays multidimensional-array

3
推荐指数
2
解决办法
304
查看次数

new int [M] [N]的类型是什么?

根据typeid(array).name()它是PAN_i在G ++ 4.8.4.我知道P意味着指针和i意味着int,但是什么类型是什么A,为什么只有第二个维度N- 而不是第一个 - M.

我应该输入什么而不是自动输入auto array = new int[M][N]

是否有分配的方式arrayint**

另一个问题是M和N必须是编译时常量.如果他们不是,我想我唯一的选择是动态C++ 03 2D阵列.

c++ arrays dynamic multidimensional-array c++11

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

Malloc是C中的2D数组

每次我为2D数组分配内存时,我首先创建一个数组,int**然后使用for我为每个元素分配内存.

例如:

int ** arr = malloc(N*sizeof(int *));
for(i=0; i< N; i++) arr[i] = malloc(M*sizeof(int));
Run Code Online (Sandbox Code Playgroud)

不可能像以下那样分配内存:

int ** arr = malloc(N*sizeof(int[M]));
Run Code Online (Sandbox Code Playgroud)

要么

int ** arr = malloc(sizeof(int[N][M]));
Run Code Online (Sandbox Code Playgroud)

为了避免for

c arrays malloc

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

C++在不复制c数组的情况下分配N维向量

我想从磁盘(HDF5)加载N维矩阵到std::vector对象.

我事先知道他们的等级,而不是形状.例如,其中一个矩阵是4级std::vector<std::vector<std::vector<std::vector<float>>>> data;

我想使用向量来存储值,因为它们是标准的而不像c-arrays那样难看(主要是因为它们知道它们的长度).

但是,加载它们的方法是使用一个加载函数void *,该函数采用a ,这对于1级向量可以正常工作,我可以调整它们然后访问它的数据指针(vector.data()).对于更高级别,vector.data()只会指向vectors,而不是实际数据.

最糟糕的情况我只是将所有数据加载到辅助c数组然后手动复制,但这可能会使大矩阵的速度降低很多.

有没有办法在向量中包含连续的多维数据,然后获得单个地址?

c++ arrays vector

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

在这段代码中 delete[] free 是否正确?

考虑以下使用动态分配的二维数组的方式(由于某种原因,这里的回复中没有出现这种方式):

const int nRows = 2, nCols = 3;
int (*arr)[nCols] = (int(*)[nCols])(new int[nRows * nCols]);
arr[1][1] = 2;
std::cout << arr[1][1] << endl;
delete[] arr;
Run Code Online (Sandbox Code Playgroud)

delete[]在这种情况下,最后一行是否正确释放了内存?

c++ dynamic-memory-allocation

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