4

私はC++が初めてで、スライスリストを使用してPythonで簡単にできることを1つしようとしていますが、C++でそれを行う簡単な方法が見つかりません。

次のように、特定の要素で開始するように配列を並べ替える必要があります。配列を要素 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
}

どんな助けでも大歓迎です!!

ありがとう

ルイス

4

1 に答える 1

5

std::rotateメソッドを使用して、この並べ替えを行います。配列の先頭を最初のパラメーターとして、配列の末尾 (つまりarray+length) を最後のパラメーターとして指定し、「中間点」を 2 番目のパラメーターとして指定します。Midpoint は、初期位置に移動する要素のインデックスを定義します。

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;

これは印刷します 3 4 5 1 2

于 2012-11-14T01:17:44.400 に答える