-2

I'm doing an Arduino project and I need to pass arrays with different sizes as parameter to my function.
The problem is that std::vector is not an option.

How can I do that?

463035818_is_not_a_number
  • 88,680
  • 9
  • 76
  • 150
BrunoTS
  • 151
  • 14

2 Answers2

2

The fallback is to pass a pointer to the first element in the array and the size:

void foo(int* arr, size_t size);

The reason for std::vector not being available on some platforms is that on some platforms dynamic allocations is a bad idea. However, once you are dynamically allocating arrays:

int* x = new int[42];
foo(arr,42);          // array decays to pointer
delete[] x;

then you could as well use std::vector.

If std::vector is not available to you, then either search for an alternative (maybe this?) or write your own. The pointer + size approach is fragile and not recommended unless absolutely necessary. The power of std::vector is from the abstract concept to encapsulate the array, its size and capacity. Nobody can prevent you to apply that concept even if you cannot use std::vector.

In case you are talking about statically sized arrays, then thats not quite the use case for std::vector. You do not need dynamic allocation, and you can pass arrays by reference. I won't repeat here what you can find in this answer (std::array) or here (c-arrays).

463035818_is_not_a_number
  • 88,680
  • 9
  • 76
  • 150
1

Something like this should work

template<size_t N>
void DaFunction(std::array<int, N>& daArray)
Surt
  • 14,741
  • 3
  • 23
  • 36