小编use*_*738的帖子

快速元素访问用于连续数组的多维表示

我有一个在内存中连续表示的多维数组.我希望隐藏这种表示,让用户访问数组元素就好像它是多维的:例如my_array[0][3][5]my_array(0,3,5)类似的东西.直到运行时才确定对象的尺寸,但是使用指定它具有多少维度的类型创建对象.这个元素查找需要被调用数十亿次,因此希望每次调用都需要最小的开销.

我看过类似的问题,但没有真正找到一个好的解决方案.使用[]运算符需要创建N-1维对象,这对于像向量矢量这样的多维结构很好,因为对象已经存在,但是对于连续的数组,它看起来很快就会卷曲并需要某种切片通过原始数组.

我还研究了重载(),这似乎更有希望,但需要指定参数的数量,这将根据数组的维数而变化.我曾考虑使用列表初始化或向量,但希望避免实例化对象.

我对模板和图形只有一点了解,应该有一些方法可以使用C++的宏伟模板功能来()为不同类型(例如不同数量的维度)的数组指定唯一的重载.但我只在真正基本的通用情况下使用模板,比如使用函数float和两者double.

我想象的是这样的:

template<typename TDim>
class MultiArray {
public:
  MultiArray() {} //build some things
  ~MultiArray() {} //destroy some things

  // The number of arguments would be == to TDim for the instantiated class
  float& operator() (int dim1, int dim2, ...) {
    //convert to contiguous index and return ref to element
    // I believe the conversion equation is something like:
    // dim1 + …
Run Code Online (Sandbox Code Playgroud)

c++ optimization templates variadic-templates c++11

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

将多种类型存储为 C++ 字典中的值?

我想编写一个行为几乎等同于 Python 字典的 C++ 对象。C++std::mapstd::unordered_mapPython 字典已经具备的一些功能,但缺乏最重要的功能之一,即能够添加任意对象和类型。即使不可能,您离实现 Python 字典的功能还有多远?

之前的一些问题(此处此处)无法处理向字典添加多种类型的问题。

例如,我希望能够在 C++ 中做这样的事情:

my_dict = {'first': 1,
           'second': "string",
           'third': 3.5,
           'fourth': my_object}
my_dict['fifth'] = list([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

我能想到的最好的解决方案是使用void指向重新解释的数据的指针,或者某种具有某些类型限制的运行时多态性?

c++ python

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