Cannot use .begin() or .end() on an array
Arrays have no member functions as they aren't a class type. This is what the error is saying.
You can use std::begin(arr)
and std::end(arr)
from the <iterator>
header instead. This also works with types that do have .begin()
and .end()
members, via overloading:
#include <array>#include <vector>#include <iterator>int main(){ int c_array[5] = {}; std::array<int, 5> cpp_array = {}; std::vector<int> cpp_dynarray(5); auto c_array_begin = std::begin(c_array); // = c_array + 0 auto c_array_end = std::end(c_array); // = c_array + 5 auto cpp_array_begin = std::begin(cpp_array); // = cpp_array.begin() auto cpp_array_end = std::end(cpp_array); // = cpp_array.end() auto cpp_dynarray_begin = std::begin(cpp_dynarray); // = cpp_dynarray.begin() auto cpp_dynarray_end = std::end(cpp_dynarray); // = cpp_dynarray.end()}
In C++, arrays are not classes and therefore do not have any member methods. They do behave like pointers in some contexts. You can take advantage of this by modifying your code:
#include <iostream>using namespace std;int main(){ int * mypointer; const int SIZE = 5; int arr[SIZE] = {1,3,5,7,9}; mypointer = arr; for(auto it = arr; it != arr + SIZE; ++it) { cout<<*mypointer<<endl; mypointer++; } return 0;}
Of course, this means that mypointer
and it
both contain the same address, so you don't need both of them.