Не работает метод sort() в с++

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int arr[] = {10, 65, 7, 0, 21, 99, 44, 39, 15, 52};
    arr.sort(arr.begin(), arr.end());
    
    for (int i = 0; i < 10; i++) {
        cout << arr[i] << " ";
    }
}
Я получаю ошибку:

    main.cpp:8:9: error: request for member ‘sort’ in ‘arr’, which is of non-class type ‘int [10]’
    8 |     arr.sort(arr.begin(), arr.end());
      |         ^~~~
main.cpp:8:18: error: request for member ‘begin’ in ‘arr’, which is of non-class type ‘int [10]’
    8 |     arr.sort(arr.begin(), arr.end());
      |                  ^~~~~
main.cpp:8:31: error: request for member ‘end’ in ‘arr’, which is of non-class type ‘int [10]’
    8 |     arr.sort(arr.begin(), arr.end());
      |                               ^~~

Ответы (1 шт):

Автор решения: S.H.

Можно так:

    #include <iostream>
    #include <algorithm>
    #include <array>

    using namespace std;

    int main() {
        array<int, 10> arr = {10, 65, 7, 0, 21, 99, 44, 39, 15, 52};
        sort(arr.begin(), arr.end());
        
        for (int i = 0; i < 10; i++) {
            cout << arr[i] << " ";
        }
    }

Фактически, в исходном коде у Вас три проблемы:

sort() нужно вызывать не у сортируемого объекта, а "сам по себе" (это отличие больно бъет по мозгам при переходе на C++ с такого языка, например, как C#)

итак, пытаемся написать

    int arr[] = {10, 65, 7, 0, 21, 99, 44, 39, 15, 52};
    sort(arr.begin(), arr.end()); 

и получаем две другие ошибки: begin() и end() у int[] - нету.

именно эту проблему я решил, перейдя на "более продвинутый" контейнер array.

Но можно и "по старому", просто вызвать метод sort с правильными аргументами:

    #include <iostream>
    #include <algorithm>

    using namespace std;

    int main() {
        int arr[] = {10, 65, 7, 0, 21, 99, 44, 39, 15, 52};
        
        sort(&arr[0], &arr[9]);
        
        for (int i = 0; i < 10; i++) {
            cout << arr[i] << " ";
        }
    }

А еще мне в комментариях подсказали, как то же самое можно сделать гораздо правильнее, спасибо уважаемому ARHovsepyan:

    using namespace std;

    int main() {
        int arr[] = {10, 65, 7, 0, 21, 99, 44, 39, 15, 52};
        
        sort(begin(arr), end(arr));
        
        for (int i = 0; i < 10; i++) {
            cout << arr[i] << " ";
        }
    }
→ Ссылка