Passing an std::array of Unknown Size to a Function
Question:
How can a function be written to handle std::arrays of known type but varying sizes? For instance, consider the following example:
<code class="cpp">// Hypothetical function void mulArray(std::array<int, ?>& arr, const int multiplier) { for (auto& e : arr) { e *= multiplier; } }</code>
How can a function such as mulArray be defined to accommodate arrays of varying sizes like the following:
<code class="cpp">std::array<int, 17> arr1; std::array<int, 6> arr2; std::array<int, 95> arr3;</code>
Answer:
Unfortunately, it is not possible to write a function that accepts std::arrays of unknown sizes without using a function template or employing a different container type, such as std::vector.
Function Templates:
<code class="cpp">template<std::size_t SIZE> void mulArray(std::array<int, SIZE>& arr, const int multiplier) { for (auto& e : arr) { e *= multiplier; } }</code>
In this example, the mulArray function is defined as a function template, allowing it to handle arrays of any size. The SIZE parameter specifies the size of the array at compile time.
Example Usage:
<code class="cpp">// Array of size 17 std::array<int, 17> arr1; // Function call with template instantiation for size 17 mulArray(arr1, 3);</code>
Note: When using function templates, the function definition must be placed in a header file to be accessible during compilation.
The above is the detailed content of How to Handle std::Arrays of Varying Sizes in C Functions?. For more information, please follow other related articles on the PHP Chinese website!