如何在c ++中向左或向右移动数组?

时间:2014-05-05 20:17:40

标签: c++ arrays algorithm

我有一个数组a[]={1,0,0,0,0};,我想旋转它,所以它最终结束:a[] = {0,0,0,0,1};

如何将一个元素向左移动或多移一个元素?

#include<iostream.h>

int main ()
{                      
     int temp,a[] = {1,0,0,0,0};              
     for(int i =0;i<=4;i++)
     {
        temp = a[0];
        a[i] = a[i-1];
        a[4] = temp;  
        cout << a[i];
     }
    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:10)

使用标题std::rotate

中声明的标准算法<algorithm>

例如

#include <iostream>
#include <algorithm>
#include <iterator>

int main() 
{
    int a[] = { 1, 0, 0, 0, 0 };
    std::rotate( std::begin( a ), std::next( std::begin( a ) ), std::end( a ) );

    for ( int x : a ) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;
}

输出

0 0 0 0 1

声明

    std::rotate( std::begin( a ), std::next( std::begin( a ) ), std::end( a ) );

可写得更简单

    std::rotate( a, a + 1, a + 5 );

如果你想让原始数组保持不变,你也可以使用标准算法std::rotate_copy

如果您的编译器不支持基于范围的for循环,那么您可以编写

for ( size_t i = 0; i < 5; i++ ) std::cout << a[i] << ' ';

答案 1 :(得分:5)

如果您有权访问C ++ 11,可以通过创建std::valarray然后使用cshift function(代表循环移位)来完成。

std::valarray是一个对象,它被设计为C++ 2011 standard的一部分,用于保存值数组,然后轻松地对它们执行操作,例如数学运算符和常见函数,如swapshift

举个例子:

#include <valarray>

int main()
{
  int myInts[] = {1,2,3,4,5};

  std::valarray<int> myValArray(myInts, 5);  // 1 2 3 4 5
  myValArray = myValArray.cshift(2);         // 3 4 5 1 2 - rotated left
  myValArray = myValArray.cshift(-1);        // 2 3 4 5 1 - rotated right

  return 0;
}