Форум программистов, компьютерный форум CyberForum.ru

Вектор. Поменять местами первый и максимальный элементы вектора - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
MM!KE
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 6
18.01.2014, 18:31     Вектор. Поменять местами первый и максимальный элементы вектора #1
Препод задал задачку, а я тупой в С++, и не могу решить. Помогите пожалуйста!
Вот задача:
Дан вектор, состоящий из 9 вещественных элементов. Поменять местами первый и максимальный элементы вектора. ВВод-вывод потоковый.
Что делать, с чего начать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2014, 18:31     Вектор. Поменять местами первый и максимальный элементы вектора
Посмотрите здесь:

C++ поменять местами максимальный элемент массива и первый
C++ Переставить местами первый минимальный и первый максимальный элементы массива из n вещественных чисел
Поменять в массиве местами первый максимальный и последний минимальный элементы C++
C++ Массивы. Поменять местами первый минимальный и последний максимальный элементы
C++ Поменять в списке местами первый минимальный и последний максимальный элементы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
18.01.2014, 18:38     Вектор. Поменять местами первый и максимальный элементы вектора #2
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <algorithm>
#include <vector>
 
int main ( ) {
    std::vector < float > vec { 6.4f , 0.8f , 1.7f , 10.6f , 4.7f , 9.3f , 7.1f , 5.43f , 4.2f } ;
    std::swap ( *vec.begin() , *std::max_element ( vec.begin() , vec.end() ) );
    for ( auto x : vec )
        std::cout << x << " " ;
    std::cout << std::endl ;
}
MM!KE
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 6
18.01.2014, 19:51  [ТС]     Вектор. Поменять местами первый и максимальный элементы вектора #3
Кликните здесь для просмотра всего текста
Код
mingw32-g++.exe   -c C:\Users\MMiKE\Desktop\С++\main.cpp -o C:\Users\MMiKE\Desktop\С++\main.o
C:\Users\MMiKE\Desktop\С++\main.cpp: In function 'int main()':
C:\Users\MMiKE\Desktop\С++\main.cpp:6:27: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
     std::vector < float > vec { 6.4f , 0.8f , 1.7f , 10.6f , 4.7f , 9.3f , 7.1f , 5.43f , 4.2f } ;
                           ^
C:\Users\MMiKE\Desktop\С++\main.cpp:6:96: error: in C++98 'vec' must be initialized by constructor, not by '{...}'
     std::vector < float > vec { 6.4f , 0.8f , 1.7f , 10.6f , 4.7f , 9.3f , 7.1f , 5.43f , 4.2f } ;
                                                                                                ^
C:\Users\MMiKE\Desktop\С++\main.cpp:6:96: error: no matching function for call to 'std::vector<float>::vector(<brace-enclosed initializer list>)'
C:\Users\MMiKE\Desktop\С++\main.cpp:6:96: note: candidates are:
In file included from c:\program files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\vector:64:0,
                 from C:\Users\MMiKE\Desktop\С++\main.cpp:3:
c:\program files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_vector.h:398:9: note: template<class _InputIterator> std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&)
         vector(_InputIterator __first, _InputIterator __last,
         ^
c:\program files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_vector.h:398:9: note:   template argument deduction/substitution failed:
C:\Users\MMiKE\Desktop\С++\main.cpp:6:96: note:   cannot convert '1.70000005e+0f' (type 'float') to type 'const allocator_type& {aka const std::allocator<float>&}'
     std::vector < float > vec { 6.4f , 0.8f , 1.7f , 10.6f , 4.7f , 9.3f , 7.1f , 5.43f , 4.2f } ;
                                                                                                ^
In file included from c:\program files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\vector:64:0,
                 from C:\Users\MMiKE\Desktop\С++\main.cpp:3:
c:\program files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_vector.h:310:7: note: std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = float; _Alloc = std::allocator<float>]
       vector(const vector& __x)
       ^
c:\program files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_vector.h:310:7: note:   candidate expects 1 argument, 9 provided
c:\program files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_vector.h:295:7: note: std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const value_type&, const allocator_type&) [with _Tp = float; _Alloc = std::allocator<float>; std::vector<_Tp, _Alloc>::size_type = unsigned int; std::vector<_Tp, _Alloc>::value_type = float; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<float>]
       vector(size_type __n, const value_type& __value = value_type(),
       ^
c:\program files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_vector.h:295:7: note:   candidate expects 3 arguments, 9 provided
c:\program files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_vector.h:256:7: note: std::vector<_Tp, _Alloc>::vector(const allocator_type&) [with _Tp = float; _Alloc = std::allocator<float>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<float>]
       vector(const allocator_type& __a)
       ^
c:\program files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_vector.h:256:7: note:   candidate expects 1 argument, 9 provided
c:\program files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_vector.h:248:7: note: std::vector<_Tp, _Alloc>::vector() [with _Tp = float; _Alloc = std::allocator<float>]
       vector()
       ^
c:\program files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_vector.h:248:7: note:   candidate expects 0 arguments, 9 provided
C:\Users\MMiKE\Desktop\С++\main.cpp:8:16: error: 'x' does not name a type
     for ( auto x : vec )
                ^
C:\Users\MMiKE\Desktop\С++\main.cpp:10:5: error: expected ';' before 'std'
     std::cout << std::endl ;
     ^
C:\Users\MMiKE\Desktop\С++\main.cpp:11:1: error: expected primary-expression before '}' token
 }
 ^
C:\Users\MMiKE\Desktop\С++\main.cpp:11:1: error: expected ')' before '}' token
C:\Users\MMiKE\Desktop\С++\main.cpp:11:1: error: expected primary-expression before '}' token
C:\Users\MMiKE\Desktop\С++\main.cpp:11:1: error: expected ';' before '}' token
Process terminated with status 1 (0 minute(s), 0 second(s))
8 error(s), 1 warning(s) (0 minute(s), 0 second(s))
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
18.01.2014, 20:18     Вектор. Поменять местами первый и максимальный элементы вектора #4
Цитата Сообщение от MM!KE Посмотреть сообщение
only available with -std=c++11 or -std=gnu++11
ну вроде бы явно пишет.
Нужна поддержка 11 стандарта (С++11).
MM!KE
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 6
18.01.2014, 20:26  [ТС]     Вектор. Поменять местами первый и максимальный элементы вектора #5
у меня CodeBlocks, т.е. он не поддерживает этот стандарт?
Попробовал проверить ошибки в Вижуал С++, пишет ошибок нет, но он древний, на семерке стоит криво, компилировать не хочет
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
18.01.2014, 20:30     Вектор. Поменять местами первый и максимальный элементы вектора #6
Цитата Сообщение от MM!KE Посмотреть сообщение
у меня CodeBlocks, т.е. он не поддерживает этот стандарт?
CodeBlocks - среда разработки. За компиляцию отвечает компилятор. В CB он по дефолту mingw.
Зайдите в Setting > Compiler and debugger и поставьте галочку на флаге -std=c++11 (либо -std=c++0x). Можно также самому дописать данный флаг в Other options.
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
18.01.2014, 20:49     Вектор. Поменять местами первый и максимальный элементы вектора #7
Или переделайте под старое, делов то:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <algorithm>
#include <vector>
 
int main ( ) {
    std::vector < float > vec;
    /* заполняешь вектор */ ;
    std::swap ( *vec.begin() , *std::max_element ( vec.begin() , vec.end() ) );
    for ( size_t i = 0; i<vec.size(); ++i )
        std::cout << vec[i] << " " ;
    std::cout << std::endl ;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
18.01.2014, 21:07     Вектор. Поменять местами первый и максимальный элементы вектора #8
По контейнерам лучше проходится через итераторы

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <algorithm>
#include <iostream>
 
int main()
{
    float arr[] = {6.4f, 0.8f, 1.7f, 10.6f, 4.7f, 9.3f, 7.1f, 5.43f, 4.2f};
    const int size = sizeof(arr) / sizeof(*arr);
    std::swap(arr[0], *std::max_element(arr, arr + size));
    for (int i=0; i < size; i++)
        std::cout << arr[i] << " ";
    std::cout << std::endl ;
}
MM!KE
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 6
19.01.2014, 02:06  [ТС]     Вектор. Поменять местами первый и максимальный элементы вектора #9
Цитата Сообщение от MrGluck Посмотреть сообщение
галочку на флаге -std=c++11 (либо -std=c++0x).
Заработало. Попробую показать преподу первый код, надеюсь зачет получу...

Добавлено через 4 часа 47 минут
И все таки я попытался разобраться:
Но понял не все что написано в коде, да и не могу же я без пояснения прийти к преподу и тупо показать код...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <algorithm> //Подключение библиотеки алгоритмов. Нужно для использования алгоритма max_element()
#include <iostream> //Функции и переменные для организации ввода-вывода
using namespace std; //Позволяет обращаться к обьектам std:: напрямую
 
int main() //функция - тело программы с которой начинаются все программы на Си. 
{
    float arr[] = {6.4f, 0.8f, 1.7f, 10.6f, 4.7f, 9.3f, 7.1f, 5.43f, 4.2f}; //задается вещественная переменная float и массив со соотв. значениями
    const int size = sizeof(arr) / sizeof(*arr);//задается целочисленная константа 
    swap(arr[0], *max_element(arr, arr + size)); //swap, функция которая меняет значения местами
    for (int i=0; i < size; i++) //цикл for (действие до начала цикла;условие продолжения цикла;действия в конце каждой итерации цикла)
    cout << arr[i] << " "; //вывод на экран
    cout << std::endl ; //вывод на экран окончания
}/конец
меньше всего я смог понять
float arr[] = {6.4f, 0.8f, 1.7f, 10.6f, 4.7f, 9.3f, 7.1f, 5.43f, 4.2f};
Очень прошу пояснить, почему составляющие массива с буквой f на конце?
и пояснить: const int size = sizeof(arr) / sizeof(*arr);

Если мои пояснения неправильны, прошу исправить меня!
MM!KE
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 6
19.01.2014, 02:25  [ТС]     Вектор. Поменять местами первый и максимальный элементы вектора #10
И все таки я попытался разобраться:
Но понял не все что написано в коде, да и не могу же я без пояснения прийти к преподу и тупо показать код...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <algorithm> //Подключение библиотеки алгоритмов. Нужно для использования алгоритма max_element()
#include <iostream> //Функции и переменные для организации ввода-вывода
using namespace std; //Позволяет обращаться к обьектам std:: напрямую
 
int main() //функция - тело программы с которой начинаются все программы на Си.
{
    float arr[] = {6.4f, 0.8f, 1.7f, 10.6f, 4.7f, 9.3f, 7.1f, 5.43f, 4.2f}; //задается вещественная переменная float и массив со соотв. значениями
    const int size = sizeof(arr) / sizeof(*arr);//задается целочисленная константа
    swap(arr[0], *max_element(arr, arr + size)); //swap, функция которая меняет значения местами
    for (int i=0; i < size; i++) //цикл for (действие до начала цикла;условие продолжения цикла;действия в конце каждой итерации цикла)
    cout << arr[i] << " "; //вывод на экран
    cout << std::endl ; //вывод на экран окончания
}//конец
меньше всего я смог понять
C++
1
float arr[] = {6.4f, 0.8f, 1.7f, 10.6f, 4.7f, 9.3f, 7.1f, 5.43f, 4.2f};
Очень прошу пояснить, почему составляющие массива с буквой f на конце? и пояснить:
C++
1
[quote="MM!KE;5658412"]и пояснить: const int size = sizeof(arr) / sizeof(*arr);[/quote]
Если мои пояснения неправильны, прошу исправить меня!
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
19.01.2014, 02:49     Вектор. Поменять местами первый и максимальный элементы вектора #11
Цитата Сообщение от MM!KE Посмотреть сообщение
меньше всего я смог понять
Объявляем массив arr неопределенной длины (компилятор сам подсчитает количество элементов) и инициализируем его с помощью списка инициализации. f на конец обозначает что число имеет тип float.
можно использовать
C++
1
double arr[] = { /* те же числа, но без f на конце */ };
Цитата Сообщение от MM!KE Посмотреть сообщение
Очень прошу пояснить, почему составляющие массива с буквой f на конце? и пояснить:
мы объявляем константу size и записываем в неё количество элементов массива (т.к. изначально мы размер не указывали явно).
Происходит это следующим образом: мы узнаем размер всего массива и делим его на размер одного элемента. *arr по сути означает то же, что и arr[0].

В цикле for мы перебираем все элементы массива.
endl всего-лишь выводит на экран символ перевода строки "\n" и сбрасывает буфер вывода (если что-то еще не вывелось - оно выводится).
Заголовочный файлы algorithm неверно называть библиотекой. И функция swap также содержится в нем.
Croessmah
19.01.2014, 08:30
  #12

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Заголовочный файлы algorithm неверно называть библиотекой.
header-only

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2014, 09:05     Вектор. Поменять местами первый и максимальный элементы вектора
Еще ссылки по теме:

В последовательности из n действительных чисел поменять местами максимальный элемент и первый C++
Поменять местами первый минимальный и последний максимальный элементы массива C++
C++ Поменять местами максимальный элемент массива и первый

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MM!KE
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 6
19.01.2014, 09:05  [ТС]     Вектор. Поменять местами первый и максимальный элементы вектора #13
Господа, дай вам бог здоровья и счастья! Вы тащите. Спасибо вам!
Yandex
Объявления
19.01.2014, 09:05     Вектор. Поменять местами первый и максимальный элементы вектора
Ответ Создать тему
Опции темы

Текущее время: 07:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru