Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the size of an Array? [duplicate]

Tags:

c++

arrays

In C# I use the Length property embedded to the array I'd like to get the size of. How to do that in C++?

like image 450
Ivan Prodanov Avatar asked May 17 '09 08:05

Ivan Prodanov


People also ask

How do you find a repeated value in an array?

Duplicate elements can be found using two loops. The outer loop will iterate through the array from 0 to length of the array. The outer loop will select an element. The inner loop will be used to compare the selected element with the rest of the elements of the array.

How do you find the size of an array?

We can find the size of an array using the sizeof() operator as shown: // Finds size of arr[] and stores in 'size' int size = sizeof(arr)/sizeof(arr[0]);

How many duplicates are in an array?

Given an array of integers, count the number of duplicate array elements. Duplicate is defined as more than one identical elements. For example, in the array [1, 3, 3, 5, 5, 5], the two 3's are one duplicate and so are the three 5's. So, the number of duplicates is 2.


2 Answers

It really depends what you mean by "array". Arrays in C++ will have a size (meaning the "raw" byte-size now) that equals to N times the size of one item. By that one can easily get the number of items using the sizeof operator. But this requires that you still have access to the type of that array. Once you pass it to functions, it will be converted to pointers, and then you are lost. No size can be determined anymore. You will have to construct some other way that relies on the value of the elements to calculate the size.

Here are some examples:

int a[5];
size_t size = (sizeof a / sizeof a[0]); // size == 5

int *pa = a; 

If we now lose the name "a" (and therefor its type), for example by passing "pa" to a function where that function only then has the value of that pointer, then we are out of luck. We then cannot receive the size anymore. We would need to pass the size along with the pointer to that function.

The same restrictions apply when we get an array by using new. It returns a pointer pointing to that array's elements, and thus the size will be lost.

int *p = new int[5];
  // can't get the size of the array p points to. 
delete[] p;

It can't return a pointer that has the type of the array incorporated, because the size of the array created with new can be calculated at runtime. But types in C++ must be set at compile-time. Thus, new erases that array part, and returns a pointer to the elements instead. Note that you don't need to mess with new in C++. You can use the std::vector template, as recommended by another answer.

like image 89
Johannes Schaub - litb Avatar answered Oct 17 '22 06:10

Johannes Schaub - litb


Arrays in C/C++ do not store their lengths in memory, so it is impossible to find their size purely given a pointer to an array. Any code using arrays in those languages relies on a constant known size, or a separate variable being passed around that specifies their size.

A common solution to this, if it does present a problem, is to use the std::vector class from the standard library, which is much closer to a managed (C#) array, i.e. stores its length and additionally has a few useful member functions (for searching and manipulation).

Using std::vector, you can simply call vector.size() to get its size/length.

like image 31
Noldorin Avatar answered Oct 17 '22 04:10

Noldorin