0

When I write the code it shows error

#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int arr[] = {12, 3, 4, 15};
    int n = arr.size();
    
    cout << "Size of array is " << n;
    return 0;
}




Compilation failed due to following error(s).
main.cpp:7:17: error: request for member ‘size’ in ‘arr’, which is of non-class type ‘int [4]’

    7 |     int n = arr.size();
      |                 ^~~~

it also didn't work for vector array i tried that also can't understand the problem

  • 1
    Use a `std::vector` instead of a raw array. – πάντα ῥεῖ Mar 18 '22 at 10:28
  • 1
    You can also use `sizeof(arr)/sizeof(arr[0])` or the non standard `_countof(arr)` which exists on some platforms. – Jabberwocky Mar 18 '22 at 10:37
  • _"it also didn't work for vector array"_: what is a vector array? – Jabberwocky Mar 18 '22 at 10:40
  • 2
    `#include ` -- I know you didn't get this from a reputable C++ book, which you should be using to learn C++. Instead, you probably got code from a dodgy C++ website and [used this non-standard header](https://stackoverflow.com/questions/31816095/why-should-i-not-include-bits-stdc-h). – PaulMcKenzie Mar 18 '22 at 13:00

2 Answers2

6

As a rule of thumb, use

std::vector<int> arr = {12, 3, 4, 15};

with

arr.size();

returning the number of elements, unless you have a good reason not to.

Failing that, std::size(arr) will give you the number of elements, but only if arr has not already decayed to a pointer type by virtue of your receiving it as a function parameter. That C++ standard library function does something clever to obviate the normal pointer decay you observe with C-style arrays.

Bathsheba
  • 231,907
  • 34
  • 361
  • 483
5

C-array doesn't have methods.

Since C++17, you might use std::size:

const auto n = std::size(arr);
Jarod42
  • 203,559
  • 14
  • 181
  • 302