Is there a way in C++ to get a sub array from an array?
i also had the same use but instead i used vector and used the syntax
vector <int> a(10);
// for example to use by removing first element
a = std::vector<int>(a.begin() + 1, a.end())
//its ur turn to change the size
Yes. In plain C you use pointers, but in C++ you can use any kind of iterator (a pointer can be considered an iterator).
template<typename Iter>
void func(Iter arr, size_t len) { ... }
int main() {
int arr[10];
func(arr, 10); // whole array
func(arr, 5); // first five elements
func(arr + 5, 5); // last five elements
std::vector<Thing> vec = ...;
func(vec.begin(), vec.size()); // All elements
func(vec.begin(), 5); // first five
func(vec.begin() + 5, vec.size() - 5); // all but first 5
return 0;
}
The typical trick is to pass a pointer to the first element of the array, and then use a separate argument to pass the length of the array. Unfortunately there are no bounds checks, so you have to be careful to get it right or you will scribble on your memory.
You can also use half-open ranges. This is the most common way to do it. Many functions in the standard library (like std::sort
) work this way.
template<class Iter>
void func(Iter start, Iter end) { ... }
int main() {
int arr[10];
func(arr, arr + 10); // whole array
func(arr, arr + 5); // first five elements
func(arr + 5, arr + 10); // last five elements
std::vector<Thing> vec = ...;
func(vec.begin(), vec.end()); // whole vector
func(vec.begin(), vec.begin() + 5); // first five elements
func(vec.begin() + 5, vec.end()); // all but the first five elements
return 0;
}
Again, no bounds checks.