please help very lost

I am completely lost on this problem: Write a function that accepts an int array and the array s size as arguments. The function should create a new array that is one element larger than the argument array. The first element of the new array should be set to 0. Element 0 of the argument array should be copied to element 1 of the new array, element 1 of the argument array should be copied to element 2 of the new array, and so forth. The function should return a pointer to the new array.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;

void element_shift(int* elmts, int size)
{
    int new_size = size + 1;
    int* shifter = new int[new_size];
    shifter[0] = 0;
    for(int i = 0; i < size; ++i)
    {
        shifter[i + 1] = elmts[i];
    }
    delete [] elmts;
    elmts = shifter;
}


int main()
{
    fstream infile;
    infile.open("D:\\data.txt");

    int n;
    cout << "size of array: ";
    cin >> n;

    int* elements = new int[n];

    for (int i = 0; i < n; ++i) {
        infile >> elements[i];
    }

    element_shift(elements, n);

    for (int i = 0; i < n; ++i) {
        std::cout << elements[i] << std::endl;
    }

    return EXIT_SUCCESS;
}
The elmts parameter in element_shift is a local pointer. When the function ends, any changes to it are lost.

Use a reference to a pointer:
void element_shift(int*& elmts, int size)
or a pointer to a pointer:
void element_shift(int** elmts, int size)
or return a pointer to the new array:
int* element_shift(int* elmts, int size)
The last implementation would require a use like so:
elements = element_shift(elements,n);

You may also want to take the size parameter by reference as it should also change to reflect the new size.
Last edited on
Topic archived. No new replies allowed.