2015-05-31 69 views
0

我試圖在for循環中將int數組置換添加到vector中,但是當我離開一個循環時,每個vector元素都是相同的。將數組添加到for循環with random_shuffle

task_number = 6; 
vector<int*> P_0; 
int* order = new int[task_number]; 
for (int k = 0; k < task_number; k++) 
      order[k] = k; 

for (int i = 0; i < 3; i++) 
{ 
    random_shuffle(order, order+task_number); 
    cout << endl; 
    P_0.push_back(order); 
    for (int j = 0; j < task_number; j++) 
     cout << P_0[i][j] << " "; 
} 
////////////////////////////////////// 
cout << endl<<endl; 

std::vector<int*>::iterator it; 
for (it = P_0.begin(); it != P_0.end(); ++it) 
{ 
    for (int j = 0; j < task_number; j++) 
     cout << (*it)[j] << " "; 
    cout << endl; 
} 

輸出:

1 3 0 2 5 4 
1 4 5 3 2 0 
1 3 5 4 0 2 

1 3 5 4 0 2 
1 3 5 4 0 2 
1 3 5 4 0 2 

是什麼問題?我做錯了什麼?

回答

0

您必須分配的次k個整數指針。如果您更改代碼如下,它將工作

int task_number = 6; 
vector<int*> P_0; 


for (int i = 0; i < 3; i++) 
{ 
    int* order = new int[task_number]; 
    for (int k = 0; k < task_number; k++) 
      order[k] = k; 
    random_shuffle(order, order+task_number); 
    cout << endl; 
    P_0.push_back(order); 
    for (int j = 0; j < task_number; j++) 
     cout << P_0[i][j] << " "; 
} 
////////////////////////////////////// 
cout << endl<<endl; 

std::vector<int*>::iterator it; 
for (it = P_0.begin(); it != P_0.end(); ++it) 
{ 
    for (int j = 0; j < task_number; j++) 
     cout << (*it)[j] << " "; 
    cout << endl; 
} 
0

載體的所有三個元件保持相同的指針動態分配的數組

P_0.push_back(order); 

是本身沒有改變的值order的第一個元素。

而不是使用動態分配的數組,你可以使用向量的載體聲明如下

std::vector<std::vector<int>> P_0;