c++ - 指向 C++ 中动态分配的二维数组中一行的指针

标签 c++ arrays pointers dynamic

我有一个动态分配的二维数组 Volatility[r][c],在 C++ 中有 r 行和 c 列。是否可以通过某种方式创建指向特定列 c1 的指针 ptrColumn,以便我可以使用 ptrColumn[r1] 访问元素 (r1,c1)?
到目前为止,我尝试创建动态指针。但我没能做到。

谢谢!

最佳答案

您需要一个stride 迭代器。普通指针的 ++ 运算符返回一个偏移量为 1 的新指针;对于 stride 迭代器,++ 运算符将返回一个新的 stride 迭代器,其物理偏移量为 c;对于操作符 []+-- 也是如此;这是一个简单的例子:

template< typename Iterator_Type >
struct stride_iterator
{
    typedef typename std::iterator_traits<Iterator_Type>::value_type                value_type;
    typedef typename std::iterator_traits<Iterator_Type>::reference                 reference;
    typedef typename std::iterator_traits<Iterator_Type>::difference_type           difference_type;
    typedef typename std::iterator_traits<Iterator_Type>::pointer                   pointer;
    typedef typename std::iterator_traits<Iterator_Type>::iterator_category             iterator_category;

    Iterator_Type iterator_;
    difference_type step_;

    stride_iterator( Iterator_Type it, difference_type dt ) : iterator_(it), step_(dt) {}

    reference operator []( difference_type dt )
    { return iterator_[dt*step_]; }

    //other ctors, dtor and operators
};

这种情况下,假设保存二维数组的指针是double** dat,数组的维度是r by c ,您可以在列索引 c1 处创建一个 列迭代器

auto col_itor = stride_iterator<double*>{ dat + c1, c };

并使用运算符 [] 访问 dat[r1][c1] 中的元素

auto& elem = col_itor[r1];

关于c++ - 指向 C++ 中动态分配的二维数组中一行的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38576154/

相关文章:

c++ - 如何更改或删除 boost 序列化中的标签?

javascript - 使用 JavaScript 对象作为数组

ruby - 如何grep数组中与另一个数组中的模式匹配的元素?

c++ - 删除前将指针设置为 NULL

为算术转换指针 - C

javascript - 将服务对象属性的指针/引用添加到 $scope 变量

c++ - Boost 网络库在 MAC OSX 上无法识别

c++ - 在交叉编译时我必须如何处理 C++ 库?

c++ - 从 DLL 创建 PDB

ruby - 分割数组。 ruby