我有一个动态分配的二维数组 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/