c++ - 从另一个数组的指针和大小初始化数组
问题描述
在一个函数中,我可以访问另一个数组的指针和大小。将这些与指针一起传递,我想将该数据添加到地图中。如何在不复制基础数据两次的情况下做到这一点?
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>
较慢的吗?
解决方案
您不能像这样定义数组变量,因为函数参数可以在运行时变化,因此不是编译时常量,这是数组变量大小的要求。
您需要动态分配数组。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>
作为参数而不是指针和大小。
推荐阅读
- r - Issue in Not operator
- c# - 如何在 SaveFileDialog 中模拟按下保存/输入
- django - 如何在 Django Crispy 表单中更改标签类
- c++ - 如何在 C++ 中的 2 个继承类之间切换?
- scala - 使用新的键值对更新 Cassandra 中的 Map 类型列,而不是完全覆盖映射
- c# - 跨多个特定 OU GUID 搜索用户/人员
- python - 如何优化使用 groupby 和聚合的大熊猫数据框?
- azure - 如何禁用 Azure Application Insights .NetCore SDK 自动收集服务总线依赖项调用
- r - mixedCor:PCA 分类数据的错误识别?
- label - 开放层标签