从给定位置开始重新排序数组,c ++

时间:2012-11-14 01:15:12

标签: c++ arrays element

我是C ++的新手,我正在尝试使用切片列表在python中轻松做一件事, 但我无法在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
}

任何帮助都会非常感激!!

感谢

路易斯

1 个答案:

答案 0 :(得分: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;

prints 3 4 5 1 2