【问题标题】:reorder array starting at given position, c++从给定位置开始重新排序数组,C++
【发布时间】:2012-11-02 12:39:15
【问题描述】:

我是 C++ 新手,我正在尝试使用切片列表在 python 中做一件简单的事情, 但我在 c++ 中找不到简单的方法。

我需要重新排序数组以从给定元素开始,例如: 整数数组[] = {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
}

任何帮助将不胜感激!

谢谢

路易斯

【问题讨论】:

  • MINtArray 来自哪个库?该类的细节与开发更好的解决方案有关。你也没有明确提出问题。

标签: c++ arrays element


【解决方案1】:

使用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

【讨论】:

  • @user1822451 欢迎您!如果这回答了您的问题,您可能希望通过单击旁边的复选标记的轮廓来接受答案。这将向其他人表明您不再积极寻找改进的答案,并为您赢得堆栈溢出的新徽章。
猜你喜欢
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多