2013-12-09 3 views

ответ

7

Вы можете использовать либо std::swap, либо std::iter_swap.

std::swap(array[0], array[2]); 
    std::iter_swap(array, array+2); 
1

Для решения, которое не опирается на длину массива может составлять 3, вы можете использовать std::begin и std::end, чтобы найти начало и конец array, то std::iter_swap их

std::iter_swap(std::begin(array), std::end(array)-1); 

Примечание: -1, так как end итерабельного относится к одному элементу за конец. Для этого вам понадобится #include <iterator> и #include <algorithm>.

Если вы хотите быть более гибким, вы можете создать шаблонную функцию

template <typename T> 
void swap_first_and_last(T& seq) { 
    std::iter_swap(std::begin(seq), std::end(seq)-1); 
} 

, который затем может быть вызван со статическими массивами (или другими контейнерами)

swap_first_and_last(array); 

Еще одно замечанием: с список инициализаторов, вам не нужно указывать размер массива. Компилятор рассчитает один из основанных на количестве элементов, которые вы предоставляете:

int array[] = {1,2,3}; //empty [] 
Смежные вопросы