C++ 根据指针和另一个数组的大小初始化数组

C++ 根据指针和另一个数组的大小初始化数组,c++,arrays,pointers,copy,C++,Arrays,Pointers,Copy,在函数中,我可以访问另一个数组的指针和大小。将这些数据与指针一起传递,我想将这些数据添加到地图中。如何在不复制基础数据两次的情况下做到这一点 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 ne

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

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
会慢一些吗?

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

您需要动态分配阵列<代码>标准::向量是最简单的方法

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


那么我在这里如何使用
std::vector

例如:

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

// addToMap
_map.emplace(key, std::vector<double>{ptr, ptr + size});
std::无序映射;
//添加地图
_安放(键,std::vector{ptr,ptr+size});


我推荐使用<代码> STD::SPAs/COD>作为参数而不是指针和大小。< > />双数组[大小] < /COD>不是标准C++。数组的大小必须是编译时常量。是否需要使用数组?不是简单地使用指针,比如

double*array=ptr不接受?通过传递数组,您将尝试分配给
\u map[key]
\u map
是什么?你不能按你的要求去做,但是根据
\u map
是什么,可能还有其他的解决方案将自动转换为指针。
std::vector array(ptr,ptr+size)。这也意味着您的映射需要使用
std::vector
作为值类型那么我在这里如何使用
std::vector
?@EigenGrau请参见编辑。谢谢!看起来很有效。这只会复制一次数据?@EigenGrau是的。
我建议使用std::span作为参数,而不是指针和大小。
为什么?