Arrays
An array is a collecting of data, of the same type and with a fixed length. The fixed-size property is what often sets them apart from lists. Compared to arrays, vectors can be seen as lists in C++, as their size is not fixed. But why should I use arrays over vectors then if vectors are less forcing? Good question. The reason is performance. Under the hood, vectors are arrays too. Yet, when adding or removing elements, it comes to a costly restructuring of the array. Therefore, arrays have an edge over vectors performance-wise.
Here is what you need to know about arrays in C++.
Defining an array:
int example[5];
example[0] = 1;
example[1] = 2;
Using a for loop shorthand
int example[5];
for (int i = 0; i < 5; i++)
example[i] = 2;
Using pointers on arrays
In theory, one could use pointer arithmetics to set single values in the array. Here is an example. First, the third value in the array will be set to 5, then, via the pointer, to 6.
int example[5];
int* ptr = example;
example[2] = 5;
// changing the value with the pointer:
*(ptr + 2) = 6;
// prints 6
cout << example[2] << endl;
Creating arrays on the heap
int* anotherArray = new int[5];
As this array is now created on the heap, the data will last until we destroy it manually:
delete[] anotherArray;
Getting the size of an array
Getting the number of elements of an array is different for array on the stack vs. arrays on the heap.
// this array is created on the stack
int a[5];
// is the number of elements in this array:
int count = sizeof(a) / sizeof(int);
// this array is created on the heap:
int* example = new int[5];
For arrays on the heap you can't retrieve the size via a function. You need to keep track of it yourself.
Returning an array from a function
int *returnArr() {
int coordinates[2] = {1, 2};
return coordinates;
}
int main()
{
int x = returnArr()[0];
}
Passing an array as a parameter
Its as simple as that.
void doubleNumbers(int numbers[3]) {
for (int i = 0; i < 3; i++) {
cout << numbers[i] * 2 << endl;
}
}
int main() {
int numbers[3] = {1, 2, 3};
doubleNumbers(numbers);
return 0;
}