-1
#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());
      |                               ^~~
  • Пожалуйста, уточните вашу конкретную проблему или приведите более подробную информацию о том, что именно вам нужно. В текущем виде сложно понять, что именно вы спрашиваете. – Дух сообщества Mar 03 '22 at 17:55

1 Answers1

2

Можно так:

    #include <iostream>
    #include <algorithm>
    #include <array>
using namespace std;

int main() {
    array&lt;int, 10&gt; arr = {10, 65, 7, 0, 21, 99, 44, 39, 15, 52};
    sort(arr.begin(), arr.end());

    for (int i = 0; i &lt; 10; i++) {
        cout &lt;&lt; arr[i] &lt;&lt; &quot; &quot;;
    }
}

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

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(&amp;arr[0], &amp;arr[9]);

    for (int i = 0; i &lt; 10; i++) {
        cout &lt;&lt; arr[i] &lt;&lt; &quot; &quot;;
    }
}

А еще мне в комментариях подсказали, как то же самое можно сделать гораздо правильнее, спасибо уважаемому 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 &lt; 10; i++) {
        cout &lt;&lt; arr[i] &lt;&lt; &quot; &quot;;
    }
}

S.H.
  • 11,065
  • 1
  • 24
  • 46
  • 1
    для того есть std::begin() и std::end(), а массив передается проще sort( arr, arr + 9) что эквивалентно примеру в ответе – AR Hovsepyan Mar 03 '22 at 21:38
  • @ARHovsepyan - спасибо за подсказку! Возможно, я Вас не понял, но при попытке использовать - получаю ошибку компиляции 'error: request for member 'begin' in 'arr', which is of non-class type 'int [10]' – S.H. Mar 03 '22 at 21:46
  • Вы пробовали ' std::sort(std::begin(arr), std::end(arr)) ' ? – AR Hovsepyan Mar 03 '22 at 21:53
  • Круто! я не догадался как то, что arr можно подставить как аргумент begin(arr) и end(arr). Сейчас добавлю Ваш варинат в ответ – S.H. Mar 03 '22 at 22:01
  • 1
    Но можно и "по старому", просто вызвать метод sort с правильными аргументами Довольно показательно, что один из переданных аргументов таки не правильный :) Если у вас возникнет желание написать нечто наподобие &arr[10], то намного лучше написать arr + 10. Так как для массива из 10 элементов запись &arr[10] с формальной точки зрения вызывает неопределённое поведение. См. этот ответ. – wololo Mar 12 '22 at 09:47
  • @wololo - "Довольно показательно, что один из переданных аргументов таки не правильный" - круто! спасибо, я не знал о таком неопределеннм поведении. чуть попозже поправлю свой ответ – S.H. Mar 12 '22 at 11:21