我有一個動態分配的二維數組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