Как в масиве переместить элемент с одной позиций на другую? [требует правки]

445
25 декабря 2016, 20:53

Есть массив:

18.666667
-9216.000000
-4480.000000
-2389.333333
-2016.000000
448.000000

Как переставить 18.6 на место между -2016 и 448 (на предпоследнюю позицию)?

Answer 1

Сохранить 18.6 во временной переменной, сдвинуть все в массиве начиная с -9216... по -2016... включительно на один элемент, и поставить сохраненное значение в нужное место...

Answer 2

Нужно создать новую переменную, в которую сохранить предпоследний элемент( иначе он пропадет). Дале устанавливаем последний элемент вместо предпоследнего. А последний элемент равен той новой переменной.

Answer 3

Можно попробовать сдвинуть элемент массива на k позиций с помощью метода std::rotate: Более детально описано тут

Answer 4

Для арифметических типов проще всего и эффективнее будет воспользоваться стандартной функцией std::memmove, объявленной в заголовочном файле <cstring>.

Например,

#include <iostream>
#include <cstring>
int main()
{
    double a[] =
    {
        18.666667, -9216.000000, -4480.000000,
        -2389.333333, -2016.000000, 448.000000 
    };
    for (double x : a) std::cout << x << ' ';
    std::cout << std::endl;
    size_t src = 0, dsn = 4;
    double tmp = a[src];
    std::memmove(a + src, a + src + 1, ( dsn - src) * sizeof( double ));
    a[dsn] = tmp;
    for (double x : a) std::cout << x << ' ';
    std::cout << std::endl;
}

Вывод программы на консоль

18.6667 -9216 -4480 -2389.33 -2016 448
-9216 -4480 -2389.33 -2016 18.6667 448
Answer 5
std::sort(std::begin(arr), std::end(arr));
std::sort(arr.begin() arr.end());
std::sort(pointer, pointer + arrsize);

В зависимости от типа используемого массива и версии стандарта.

READ ALSO
Функция умножения float чисел

Функция умножения float чисел

Пытаюсь написать функцию с переменным числом параметров без использования доп библиотекФункция такого вида: sum(int к-во элементов,элемент1,элемент2...

388
Поиск подстроки без учёта регистра [требует правки]

Поиск подстроки без учёта регистра [требует правки]

Нужно найти подстроку, в строке wstring, без учёта регистраОС - Windows

329
Qt custom geoservice plugin

Qt custom geoservice plugin

Использую Map компонент под QML и кровь из носа нужно сделать поддержку различных поставщиков карт, таких как Yandex, Google, Yahoo и тд

379
Синхронизация потоков с помощью Event c++

Синхронизация потоков с помощью Event c++

Необходимо, чтобы нить t4 ждала события просчета времени "time = 1000 * (getTime() - time);" и после этого запускаласьКак реализовать? Нужен именно Event (такое...

389