2012-11-14 81 views
4

我是新來的C++,我試圖做一件很容易的事情,在Python中使用切片列表, ,但我找不到在C++中做到這一點的簡單方法。從給定位置開始的重排序陣列,C++

我需要重新排列一個數組以開始給定元素,如: int array [] = {1,2,3,4,5}; 重新排序陣列開始在單元3: {3,4,5,1,2}

這是我發現做到這一點的方式,但它似乎是一個有點矯枉過正:

void Graph::reorder(int x, MIntArray &currentArray) 
{ 
    MIntArray reorderedIndices; 
    int index; 
    for (unsigned int i=0; i<currentArray.length();i++){if(currentArray[i]==x){index=i;}} // get the index 
    for (unsigned int i=index; i<currentArray.length();i++){reorderedIndices.append(currentArray[i]);} // zero to index 
    for (unsigned int i=0; i<index;i++){reorderedIndices.append(currentArray[i]);} // index to last 
    for (unsigned int i=0; i<currentArray.length();i++){currentArray.set(reorderedIndices[i],i);} // transfer 
} 

任何幫助將不勝感激!

感謝

路易斯

+0

什麼庫MIntArray而來?該課程的細節與開發更好的解決方案相關。你也沒有明確地提出一個問題。 –

回答

5

使用std::rotate方法來做到這一點重新排序。將數組的開始位置作爲第一個參數,將數組的末尾(即array+length)作爲最後一個參數,將「中點」作爲第二個參數。中點定義要移動到初始位置的元素索引。

int x[] = {1,2,3,4,5}; 
rotate(x, x+2, x+5); 
for (int i = 0 ; i != 5 ; i++) 
    cout << x[i] << " "; 
cout << endl; 

prints3 4 5 1 2

+0

驚人!!!!!非常感謝你!=) – user1822451

+0

@ user1822451不客氣!如果這回答您的問題,您可能想要通過點擊旁邊的複選標記輪廓來接受答案。這會向其他人表明您不再主動尋找改進的答案,併爲堆棧溢出贏得新徽章。 – dasblinkenlight