首页 > 解决方案 > 从另一个数组的指针和大小初始化数组

问题描述

在一个函数中,我可以访问另一个数组的指针和大小。将这些与指针一起传递,我想将该数据添加到地图中。如何在不复制基础数据两次的情况下做到这一点?

void addToMap(double* ptr, size_t size, unsigned key) {

 // Here I want to add the array corresponding to the pointer location and size to the map.
 // Since adding to the map needs to copy the data once anyway, I want to prevent any other copies.
 double array[size] = ?;

 // Can I initialize this array from the data found at (ptr) to (ptr + size) without a copy?
 array& = ptr; 

 _map[key] = array;

}

调用此函数后,所指向的数据将被删除。该映射只是从整数到双精度数组的映射。这只是意味着,我想以某种方式存储与此密钥关联的数据,而它仍然可用。

或者你有更好的想法吗?会在这里使用std::vector<double>较慢的吗?

标签: c++arrayspointerscopy

解决方案


您不能像这样定义数组变量,因为函数参数可以在运行时变化,因此不是编译时常量,这是数组变量大小的要求。

您需要动态分配数组。std::vector是最简单的方法。

数组也不能直接从指向另一个数组的指针初始化,无论您是初始化数组变量(此处不是选项)还是动态数组。在这里,它也std::vector有助于它提供的构造函数。

那我怎么std::vector<double>在这里使用呢?

例子:

std::unordered_map<unsigned, std::vector<double>> _map;

// addToMap
_map.emplace(key, std::vector<double>{ptr, ptr + size});

我建议使用std::span<double>作为参数而不是指针和大小。


推荐阅读