如何解决用于高效铸造的数据指针
我正在使用不同类型的数据:比如 double *、double **、Eigen::Matrix、std::vector ...
我使用不同的代码,并且它们混合了这些类型,所以我想在从一种类型传递到另一种类型时避免数据副本,例如说我有双 * 位置,在另一部分代码中我需要 std::vector vectorOfPositions,我想避免昂贵的 vectorOfPositions 初始化... 同样,带有方法 Map 的 Eigen 似乎提供了一个解决方案。我想知道是否有这样做的通用方法...
非常感谢您的帮助。这个 std::span 解决方案很有吸引力,但我使用的算法的主要设计不是我的。
我所指的一些代码示例:
typedef Eigen::Matrix<double,3,1> Vec3x;
typedef std::vector<Vec3xArray,Eigen::aligned_allocator<Vec3x> Vec3xArray;
typedef std::vector<Eigen::Vector3d> line;
struct point { double x; double y; double z;};
typedef struct point point;
point* m_points;
std::vector<double> m_positions;
Vec3xArray vertices;
line m_line;
std::vector 到 Type* 的部分答案: “元素是连续存储的,这意味着不仅可以通过迭代器访问元素,还可以使用指向元素的常规指针的偏移量。这意味着指向向量元素的指针可以传递给任何需要指针的函数到数组的元素。” ref. here.
Type* 到 std::vector 的部分答案:std::vector 假定数据的所有权 -> 这是不可能的!
使用 Eigen,使用 Map 方法进行初始化,使用 data() 获取指向数据的指针。 见Eigen doc。
解决方法
是的,有一种“通用的方法”。也就是说,设计算法使其不与特定数据结构(容器)一起工作。相反,它们与迭代器一起工作,迭代器基本上是抽象的元素范围。您可以在 C++ 标准库中找到许多示例。
您还可以在特定情况下使用 I
或 "query": {
"fuzzy": {
"title": {"value": "Intersteller","fuzziness": 1}
}
}
}
之类的类。
如果某些算法需要 std::string_view
而不是一对迭代器或 std::span
,这是 IMO 类型的设计问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。