#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());
| ^~~
Asked
Active
Viewed 427 times
-1
Gooogol_plex
- 5
- 1
-
Пожалуйста, уточните вашу конкретную проблему или приведите более подробную информацию о том, что именно вам нужно. В текущем виде сложно понять, что именно вы спрашиваете. – Дух сообщества Mar 03 '22 at 17:55
1 Answers
2
Можно так:
#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] << " ";
}
}
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
-
-
Круто! я не догадался как то, что 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