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

Сортировка диапазона элементов в list (STL) - C++

Восстановить пароль Регистрация
 
Острослав
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
30.04.2014, 21:14     Сортировка диапазона элементов в list (STL) #1
Здравствуйте!
Требуется ввести числа в список, задать числа a и b, изменить порядок элементов, начиная с a-го элемента, заканчивая b-ым элементом. Использовать только стандартную библиотеку.
Числа в список ввел, но абсолютно не понимаю как изменить порядок элементов В ЗАДАННОМ ДИАПАЗОНЕ. Есть метод reverse, но он меняет порядок во всем списке, а мне надо только в части списка.
Получается надо сделать что-то в виде цикла и далее: достать элемент из списка (с помощью какого метода?) и менять его с другим (вроде как метод swap это делает?).

Кусок кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
std::list <int> numbers;
    char ch = 0;
    while ( ch != 'n' ){
        int x;
        std::cin>>x;
        numbers.push_back(x);
        std::cout<<"continue?('n' to exit)\n";
        std::cin>>ch;
    }
    int k,p;
    std::cout<<"enter the range to change the order\n";
    std::cin>>k>>p;
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2014, 21:14     Сортировка диапазона элементов в list (STL)
Посмотрите здесь:

C++ (STL LIST SORT) Сортировка по некольким критериям
stl, удаление элементов в list C++
C++ STL list
List STL C++
STL list. В изначально пустой список вставить 100 элементов путем вставки в случайную позицию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BlackSpace
135 / 128 / 50
Регистрация: 15.03.2014
Сообщений: 275
30.04.2014, 22:06     Сортировка диапазона элементов в list (STL) #2
Острослав, reverse() позволяет изменять порядок на обратный в указанном диапазоне.
Вот Вам пример.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <list>
#include <algorithm>
 
using namespace std;
 
// функция вывода на экран элементов списка
template < class T >
void PrintList( std::list < T >& lst ) {
    for_each( lst.begin(), lst.end(), []( T n ) {cout << n << " ";} );
    std::cout << endl;
}
 
int main() {
    list < int > numbers;
    const int size = 20, a = 10, b = 15;
 
    // заполнение списка
    int i = 0;
    generate_n( back_inserter( numbers ), size, [i] () mutable {return i++;} );
    // вывод на экран
    PrintList( numbers );
 
    // изменение порядка в указанном диапазоне от a до b
    reverse( next( numbers.begin(), a ), next( numbers.begin(), b ) );
    // вывод измененного списка
    PrintList( numbers );
 
    return 0;
}
Вывод программы
Код
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
0 1 2 3 4 5 6 7 8 9 14 13 12 11 10 15 16 17 18 19
Компилятор с поддержкой C++11.
Ключ
-std=c++11
Острослав
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
30.04.2014, 23:02  [ТС]     Сортировка диапазона элементов в list (STL) #3
Цитата Сообщение от BlackSpace Посмотреть сообщение
Компилятор с поддержкой C++11.
Ключ
-std=c++11
а если у меня студия 2010, то никак иначе не сделать?
BlackSpace
135 / 128 / 50
Регистрация: 15.03.2014
Сообщений: 275
30.04.2014, 23:21     Сортировка диапазона элементов в list (STL) #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Нету у меня VS 2010, по ней ничего не подскажу.
А в общем случае заполните список, вызывайте reverse() с указанием нужного диапазона итераторами. Сам алгоритм reverse() работает и без поддержки C++11.

Только что проверил - мой код прекрасно собирается на Windows компилятором MinGW, который идет в комплекте с IDE Code::Blocks. Есди задать ключ для C++11.
Ссылка на скачивание с официального сайта
http://www.codeblocks.org/downloads/26
Файл codeblocks-13.12mingw-setup.exe
Острослав
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
30.04.2014, 23:33  [ТС]     Сортировка диапазона элементов в list (STL) #5
Цитата Сообщение от BlackSpace Посмотреть сообщение
Есди задать ключ для C++11.
а как задать ключ? (я про это в первый раз слышу)

C++
1
$ -std=c++11
так?и где это поместить?
BlackSpace
135 / 128 / 50
Регистрация: 15.03.2014
Сообщений: 275
30.04.2014, 23:57     Сортировка диапазона элементов в list (STL) #6
Острослав, Если Вы работаете в командной строке, то прямо в ней и прописываете.
Мой компилятор g++, а файл с исходным кодом называется reverse_list.cpp. Вот пример использования данного ключа.
Код
g++ -o reverse_list -std=c++11 reverse_list.cpp
А если в IDE какой-нибудь, то во многих есть специальные опции ( либо на текущий проект, либо на все проекты ) компилятора, где можно задать данный ключ.
Для Code::Blocks можно так:
Settings -> Compiller -> Global compiler settings -> Compiler settings -> Compiler flags -> галочка на пункте, в конце которого [-std=c++11]
В верхнем выпадающем списке должен быть выбран GNU GCC Compiler, если не используете другой компилятор, отличный от того, что идет в комплекте с данной IDE.
Скриншот прикрепил - тут опция для всех проектов.

В других IDE, с которыми мне приходилось работать опции компилятора выставляются похожим образом.
Миниатюры
Сортировка диапазона элементов в list (STL)  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2014, 00:05     Сортировка диапазона элементов в list (STL)
Еще ссылки по теме:

Работа с STL list + пропись List.h C++
Поиск и сортировка list STL C++
List STL сортировка и поиск C++

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

Или воспользуйтесь поиском по форуму:
BlackSpace
135 / 128 / 50
Регистрация: 15.03.2014
Сообщений: 275
01.05.2014, 00:05     Сортировка диапазона элементов в list (STL) #7
Поспешишь - людей насмешишь. В PrintList() не нужны std::, ведь уже есть нужное namespace.
Yandex
Объявления
01.05.2014, 00:05     Сортировка диапазона элементов в list (STL)
Ответ Создать тему
Опции темы

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