#include <iostream>
#include <algorithm>
#include <iterator>
int *reverse(int *arr, int size)
{
int *copyArray = new int[size];
std::reverse_copy(arr, arr+size, copyArray);
return copyArray;
}
int *expand(int *arr, int size)
{
int *newArray = new int[size * 2]();
std::copy(arr, arr+size, newArray);
return newArray;
}
int *shift(int *arr, int size)
{
int* newArray = new int [size + 1]();
std::copy(arr, arr+size, newArray+1);
return newArray;
}
void display2(int arr[], int size)
{
std::copy(arr, arr+size, std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
}
int main()
{
int const SIZE = 5;
int myArray [SIZE] = {1, 2, 3, 4, 5};
int *arraPtr = reverse(myArray, SIZE);
display2(arraPtr, SIZE);
delete [] arraPtr;
int myArray2 [SIZE] = {1, 2, 3, 4, 5};
int *arraPtr2 = expand(myArray2, SIZE);
display2(arraPtr2, SIZE*2);
delete [] arraPtr2;
int myArray3 [SIZE] = {1, 2, 3, 4, 5};
int *arraPtr3 = shift(myArray3, SIZE);
display2(arraPtr3, SIZE+1);
delete [] arraPtr3;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+CmludCAqcmV2ZXJzZShpbnQgKmFyciwgaW50IHNpemUpCnsKICAgIGludCAqY29weUFycmF5ID0gbmV3IGludFtzaXplXTsKICAgIHN0ZDo6cmV2ZXJzZV9jb3B5KGFyciwgYXJyK3NpemUsIGNvcHlBcnJheSk7CiAgICByZXR1cm4gY29weUFycmF5Owp9CmludCAqZXhwYW5kKGludCAqYXJyLCBpbnQgc2l6ZSkKewogICAgaW50ICpuZXdBcnJheSA9IG5ldyBpbnRbc2l6ZSAqIDJdKCk7CiAgICBzdGQ6OmNvcHkoYXJyLCBhcnIrc2l6ZSwgbmV3QXJyYXkpOwogICAgcmV0dXJuIG5ld0FycmF5Owp9CmludCAqc2hpZnQoaW50ICphcnIsIGludCBzaXplKQp7CiAgICBpbnQqIG5ld0FycmF5ID0gbmV3IGludCBbc2l6ZSArIDFdKCk7CiAgICBzdGQ6OmNvcHkoYXJyLCBhcnIrc2l6ZSwgbmV3QXJyYXkrMSk7CiAgICByZXR1cm4gbmV3QXJyYXk7Cn0KCnZvaWQgZGlzcGxheTIoaW50IGFycltdLCBpbnQgc2l6ZSkKewogICAgc3RkOjpjb3B5KGFyciwgYXJyK3NpemUsIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxpbnQ+KHN0ZDo6Y291dCwgIiAiKSk7CiAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKfQppbnQgbWFpbigpCnsKICAgIGludCBjb25zdCBTSVpFID0gNTsKCiAgICBpbnQgbXlBcnJheSBbU0laRV0gPSB7MSwgMiwgMywgNCwgNX07CiAgICBpbnQgKmFycmFQdHIgPSByZXZlcnNlKG15QXJyYXksIFNJWkUpOwogICAgZGlzcGxheTIoYXJyYVB0ciwgU0laRSk7CiAgICBkZWxldGUgW10gYXJyYVB0cjsKCiAgICBpbnQgbXlBcnJheTIgW1NJWkVdID0gezEsIDIsIDMsIDQsIDV9OwogICAgaW50ICphcnJhUHRyMiA9IGV4cGFuZChteUFycmF5MiwgU0laRSk7CiAgICBkaXNwbGF5MihhcnJhUHRyMiwgU0laRSoyKTsKICAgIGRlbGV0ZSBbXSBhcnJhUHRyMjsKCiAgICBpbnQgbXlBcnJheTMgW1NJWkVdID0gezEsIDIsIDMsIDQsIDV9OwogICAgaW50ICphcnJhUHRyMyA9IHNoaWZ0KG15QXJyYXkzLCBTSVpFKTsKICAgIGRpc3BsYXkyKGFycmFQdHIzLCBTSVpFKzEpOwogICAgZGVsZXRlIFtdIGFycmFQdHIzOwp9Cg==