我有一個動態分配的二維數組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. 指針,二維數組的動態備忘分配示例
- 3. 如何將指針分配給C中的二維數組?
- 4. 在C中分配二維數組中的一維數組#
- 5. 在C++中破壞了一個指向動態二維數組的指針
- 6. 如何在C++中動態分配連續的二維數組?
- 7. 如何在ANSI C中動態分配POINTERS的二維數組?
- 8. 二維數組指針C
- 9. 動態分配一個二維數組
- 10. 通過指針從動態分配的二維數組中獲取值
- 11. 二維數組的動態分配
- 12. 堆分配一個二維數組(而不是指針數組)
- 13. 動態分配指針數組中的懸掛指針
- 14. 在C中分配一維固定的二維數組
- 15. C++動態二維數組的指針(矩陣)
- 16. 動態分配二維數組與C簡單的二維數組Mpi
- 17. 指針的二維數組
- 18. 二維數組的C指針算術
- 19. C:二維數組的指針
- 20. 動態分配C數組中的二維數組時出現分段錯誤
- 21. 如何在C++中動態分配指針數組?
- 22. C++中的動態二維數組?
- 23. 如何將一個二維數組分配給一個指針?
- 24. C++動態分配二維數組過度分配內存?
- 25. 使用指針算術循環動態分配的二維數組
- 26. C指針動態分配
- 27. 指向數組和二維數組c的指針c
- 28. 動態內存分配 - 二維數組
- 29. 動態分配二維數組
- 30. 分配動態二維數組
「動態分配的二維數組「在C++中不是一個明確定義的術語。至少有兩種不同的方式來動態分配二維數組。您需要在內存中提供有關陣列物理結構的更多信息。 – AnT