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

Переставить первые М-элементов в конец массива - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Создать и вывести массив. Выполнить обработку массива по заданию. Вывести результат обработки http://www.cyberforum.ru/cpp-beginners/thread1077911.html
Создать и вывести масив. Выполнить обработку масива за заданием. Вывести результат обработки Элементов -14, тип - Real , первая сортировка - Быстрая, вторая сортировка - Обмен, направление - по увеличению.
C++ Список Задача Создать простейшее меню для вызова процедур: -создание списка -вывод всего списка -вызов заданой процедуры Создать список заданой структуры. Заполнить его информационную часть рандомными числами. Создать процедуры для обробки списка список - Стек количество элементов - 11 тип - Integer+integer цель процедуры удалить последний елемент http://www.cyberforum.ru/cpp-beginners/thread1077905.html
[Code Snippet] Такое нелёгкое это дао ! C++
Без чувства юмора от просмотра воздержаться КАТЕГОРИЧЕСКИ! // очистим буфер нулями memset( buf, 1-1+1*0 /* дао - такая штука*/, bufSize ); Добавлено через 11 минут Чё-та никто не оценил, я смотрю... :\
C++ Упорядочить по убыванию элементы одномерного массива с парными индексами
Упорядочить по убыванию элементы одномерного массива с парными индексами. Элементы массива с непарными индексами оставить на месте! Есть такой код и он оставляет элементы с непарными индексами на месте а все остальные меняет на 1 нужно помочь как упорядочить по убиванию остальные элементы не трогая эти. #include <iostream> using namespace std; void main() { int a,n; cout << "n="; cin...
C++ Ввод и вывод переменных в фунгцию http://www.cyberforum.ru/cpp-beginners/thread1077893.html
Добрый вечер, только начал осваиваться на языке C++. Возник вопрос как передать переменную внутрь функции. #include <cstdlib> #include <iostream> using namespace std; void pars() { for (int i=*start;i<=*end;i++) {
C++ элементы матрицы Растолкуйте на примере: существует матрица а, так как отсчет идет с 0-го элемента то матрица имеет размерность 11х11 и вводя в оператор адреса мы обращаемся к элементу 4-го ряда и 8-го столбца? подробнее

Показать сообщение отдельно
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
3121 / 1561 / 423
Регистрация: 18.10.2014
Сообщений: 2,888
06.11.2014, 07:17     Переставить первые М-элементов в конец массива
Цитата Сообщение от Cookie Monster Посмотреть сообщение
сделать так чтоб при смещении всех элементов вправо элементы из конца переходили в начало и делать это N -M раз
Да, это именно то, что я имел в виду под задачей из "Жемчужин программирования". Циклический сдвиг массива. Он же - обмен местами частей разной длины. Но решать эту задачу через многократно повторенный циклический сдвиг на 1 элемент - очень неэффективно.

В стандартной библиотеке С++ эта задача уже решена алгоритмом 'std::rotate' (уже использовался в ответе DiffEreD). "Возможную реализацию" можно посмотреть здесь: http://en.cppreference.com/w/cpp/algorithm/rotate

C++
1
2
3
4
5
6
7
8
9
10
11
12
template <class ForwardIt>
void rotate(ForwardIt first, ForwardIt n_first, ForwardIt last)
{
    ForwardIt next = n_first;
    while (first != next) {
        std::iter_swap(first++, next++);
        if (next == last)
            next = n_first;
        else if (first == n_first)
            n_first = next;
    }
}
Вызов

C++
1
std::rotate(a, a + M, a + N);
перенесет начальный блок из M элементов в конец массива через циклический сдвиг.

Другая остроумная реализация этой операции - это перевернуть подмассив [0, M), перевернуть подмассив [M, N) и затем перевернуть весь массив, что можно сделать через алгоритм 'std::reverse'

C++
1
2
3
std::reverse(a, a + M);
std::reverse(a + M, a + N);
std::reverse(a, a + N);
Результат будет тот же.

Ну и у Бентли еще описано два дополнительных способа реализации того же.
 
Текущее время: 21:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru