2012-12-05 178 views
1

我有一個數組這樣的:混淆陣列

int sizes[5] = {1,2,3,4,5}; 

我想通過使用上述陣列具有5個不同的陣列。因爲我希望每個陣列的尺寸爲sizes[i](0 < = i < 5)。我怎樣才能做到這一點?我越思考這一點,我越感到困惑。我必須使用多維數組還是僅使用更簡單的解決方案?提前致謝。

+1

所以你想要一個元素的5個數組?你的問題沒有完全意義 –

+0

我想我的第一個數組的大小爲1,第二個爲2,依此類推。 – w1LL1ng

回答

1

簡單,你只需要動態內存分配:

int sizes = {1, 2, 3, 4, 5}; 
int **arrays; 
int i; 

arrays = new int*[5]; 
for(i = 0; i < 5; i++) 
    arrays[i] = new int[sizes[i]] 

這是一個簡單的事情開始,但在現實生活中的STL庫更加有用。在這段代碼中,內存是動態分配的,但沒有發佈。這可能導致內存泄漏。使用STL庫中的std::vector可以讓您免於麻煩,並提供更簡單的方法。

@Mikhail展示了使用下面vector s的良好演示。

+2

不要告訴一個男人誰要求這樣的事情使用'新'。告訴他使用'std :: vector'。 – Mikhail

+0

@Mikhail只有一本很好的C++書籍在這裏有幫助 – exagi

+0

@ 0605002如果我想用隨機數填充所有數組,我該怎麼辦? – w1LL1ng

1

要回答這個問題,是的,你需要一個最有效的情況下的多維數組。一個數組數組,而元素是動態分配的(考慮你指定的數組數量是常數)。

int *Array[5]; 
for(int i = 0; i < sizes; i++) 
{ 
    Array[i] = new int[sizes[i]]; 
} 

你現在有5個動態分配數組從0號到5大小

1

你必須使用一個動態分配的,這樣的事情:

int *arrays[5]; 
int i = 0; 
int sizes[] = {1,2,3,4,5}; 
for(i = 0; i < 5; i++) 
{ 
    arrays[i] = (int *)malloc(sizes[i]); 
} 
5

我要求STL中線!

std::vector<int> arrays[5]; 
for (i = 0; i < 5; ++i) 
    arrays[i].resize(sizes[i]); 
3

正如我理解你的問題,你需要的數組長度可以在範圍[0,5](可變長度)。

所以有很多的選擇,我會爲您提供2其中:

  1. 當你打上C++標記你的問題我給你指STL,它提供了一個很多方便的容器,其中之一是std::vector這是動態數組(它的大小可以變化)。

  2. 如果填充方便與Ç,則可以使用一個數組指針的,它們中的每將在陣列的指針。