我有一个动态分配的二维数组Volatility [r] [c]在C++中有r行和c列。是否有可能创建一个指针ptrColumn到某个列c1,这样我可以通过ptrColumn [r1]访问元素(r1,c1)?
到目前为止,我试图创建动态指针。但我没有设法做到这一点。
谢谢!在C++中动态分配二维数组中的一行的指针
回答
不,那是不可能的,你有一种选择是。用原始数组的traspose创建另一个二维数组,但因为您拥有而没用每次更改原始数组时更新此数组。也许还有其他方法可以做到这一点,但是一些列没有。
Bote问题的标题。 OP没有正确表达他/她想要的。 – EFenix
通常,第一个维度用于行索引,第二个维度用于列索引。 首先,你应该为指针的阵列(例如int *
)分配内存和ADDRES作为指针保存的指针:
int** Volatility = new int * [r];
然后安排循环为每一行分配内存。例如:
for(int i = 0; i < r; i++)
Volatility[i] = new int [c];
但它是你的理想如何使用索引。
如果你想与第一索引列的工作,只是改变的逻辑:
int r = 5, c = 10;
int** Volatility = new int * [c];
// allocate memory for each column
for(int i = 0; i < c; i++)
{
Volatility[i] = new int [r];
}
正如你看到Volatility[col][row]
是一个单一的元素,Volatility[col]
是columt的指针。但是现在你不能使用指向行的指针。
最简单的方法,对我来说,是预留的内存块:
double* array2d= new double[r*c];
那么,就可以计算出指针作为array2d +指数* R(记住,内存块存储阵列列从第一列到最后一列)。
如果你想计算指针行,如果你想指针使用array2d +指数* R(在这种情况下,存储器存储行后矩阵行。
在一些地方采用双运营商[] [],您可以使用:
double **array= new double*[r];
for (int i=1; i<r; ++i)
array[i]= array[i-1]+c;
对于这个代码,你可以在你的代码中使用数组[i] [j]
您需要一个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
};
此情况下,假设指针保持2D阵列是double** dat
,以及用于该阵列的尺寸r
通过c
,则可以创建一个column iterator
在列索引c1
与
dat[r1][c1]
与操作者
auto col_itor = stride_iterator<double*>{ dat + c1, c };
和访问该元素[]
auto& elem = col_itor[r1];
- 1. 如何将指针分配给C中的二维数组?
- 2. 在C中分配二维数组中的一维数组#
- 3. 如何在ANSI C中动态分配POINTERS的二维数组?
- 4. 动态分配一个二维数组
- 5. 二维数组的动态分配
- 6. 堆分配一个二维数组(而不是指针数组)
- 7. 动态分配指针数组中的悬挂指针
- 8. 指针的二维数组
- 9. C:二维数组的指针
- 10. C++中的动态二维数组?
- 11. 指向数组和二维数组c的指针c
- 12. 在C的结构内包裹着指针的二维数组分配内存
- 13. 动态分配我的二维数组c
- 14. 二维动态数组的分配和传递参考C
- 15. C++二维动态数组
- 16. 指针和动态分配数组
- 17. C指针与二维数组
- 18. 函数内二维数组的动态分配(使用指针返回分配对象的地址)
- 19. 带指针和常规指针的二维数组? (C语言)
- 20. 二维数组指针
- 21. 二维数组和指针
- 22. 指针二维数组
- 23. 指针二维数组
- 24. 纯粹使用指针动态分配2维数组
- 25. 将值分配给C中的动态二维数组时分段错误
- 26. 在C++中声明指向二维数组的内部二维数组的指针
- 27. 如何将值分配给动态二维数组的整行?
- 28. 多维数组和C++中的指针?
- 29. 动态分配的指针数组结构用C
- 30. 创建指针动态分配的数组到结构C++
“动态分配的二维数组“在C++中不是一个明确定义的术语。至少有两种不同的方式来动态分配二维数组。您需要在内存中提供有关阵列物理结构的更多信息。 – AnT