2017-06-19 212 views
0

我想創建一個包含另一個數組變量的數組,並且應該將變量作爲別名(即不是值)複製。C++中的別名變量數組

例如

int* x; 
int* y; 
int* z[4]; // What should I do if length of z is not known initially. 
x =new int[2]; 
y= new int[2]; 
x[0]=1; 
x[1] =2; 
y[0]=3; 
y[1]=4; 
z[0] =&x[0]; 
z[1] = &x[1]; 
z[2] =&y[0]; 
z[3] =&y[1]; 

在這裏,陣列z是由xy引用製成。在'z'中所做的更改將在xy中看到,反之亦然。

我需要什麼:
2)z現在是指向整數的指針數組。我如何將它轉換爲整數數組? 3)由於指針難以管理,我如何獲得與矢量相同的功能。據我所知,矢量不能存儲引用。

+1

'std :: reference_wrapper'有幫助嗎? – Bathsheba

+0

我不明白你的問題是什麼1)。您在運行時已經分配了'z'。 2)'z'不是指向整數的指針數組。 – Rakete1111

+0

和'std :: vector'來替換原始指針。 – Jarod42

回答

1

數組的概念是內存是連續的。這意味着每一個元素都是在另一個元素之後(例如,arr[0]是第一個元素的地址,這與*arr相同,如果需要第二個元素,您將輸入arr[1],即(*arr)+1)。 如果要創建一個包含兩個其他數組的元素的數組,您必須創建第三個數組並複製值(z[0] = a[0]; ...) 對於動態分配,您可以使用具有接受整數值的構造函數的向量。 std::vector<int> z = std::vector<int>(a.size() + b.size())

這是不存儲指針的唯一方法。 請注意,如果您將容器a中的某些內容複製到容器b中,然後將其更改爲容器a,它將不會在容器b中更改。

+1

1)矢量不能存儲參考。你需要將它們包裝在'std :: reference_wrapper'中。 2)引用是*不是一個限制指針。它是特定對象的別名,並且與指針的行爲不同,尤其是,關於對象複製。您的編譯器可能將refs實現爲指針*作爲實現細節*;但從C++語言的角度來看,指針和引用是不同的概念,並且像這樣簡化它們是一個好主意。 3)你的向量示例是僞代碼嗎?有一些模板參數丟失。 4)爲什麼在世界上你想要'新'一個'std :: vector'!? – besc

+0

我應該回答你的問題還是你正在糾正我的答案? –

+0

這主要是指更正。但是,如果你有一個有效的用於''new''矢量的用例,我會真正感興趣。 – besc

0

代替這段代碼

int *z; 
z = new int[N];  //N is integer. 
z = &x[0]; 

你應該寫

int **z; 
z = new int * [N];  //N is integer. 
z[0] = &x[0]; 

或者你可以使用類模板std::vector<int *>,而不是數組。