使用STL在静态数组中交换两个元素

时间:2013-12-09 20:30:05

标签: c++ arrays stl

假设我有一个数组int array[3] = {1,2,3};,我想交换第一个和最后一个元素,以便我有array = {3,2,1};我怎么能用STL做到这一点?

2 个答案:

答案 0 :(得分:7)

您可以使用std::swapstd::iter_swap

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

答案 1 :(得分:1)

对于不依赖于数组长度为3的解决方案,您可以使用std::beginstd::end查找array的开头和结尾,然后{ {1}}他们

std::iter_swap

注意std::iter_swap(std::begin(array), std::end(array)-1); 因为iterable的-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);