C++ Tuple::swap() 函式



C++ 的 std::tuple::swap() 函式用於交換兩個相同型別元組的元素,它透過交換元組內的值來避免不必要的複製。此函式對於同時交換多個變數特別有用。

透過使用移動語義,swap() 函式透過移動元素而不是複製元素來提高效能。它提供了一種方便的方法來交換元組之間的值,而無需顯式迭代每個元素。

語法

以下是 std::tuple::swap() 函式的語法。

void swap (tuple& tpl) noexcept

引數

tpl − 它是另一個相同型別的元組物件。

返回值

此函式不返回任何值。

示例

讓我們來看下面的例子,我們將交換兩個元組。

#include <iostream>
#include <tuple>
using namespace std;
int main()
{
    tuple<int, int> x = make_tuple(11,12);
    tuple<int, int> y = make_tuple(13,14);
    swap(x, y);
    cout << "x after swap: " << get<0>(x) << ", " << get<1>(x) << endl;
    cout << "y after swap: " << get<0>(y) << ", " << get<1>(y) << endl;
    return 0;
}

輸出

讓我們編譯並執行上面的程式,這將產生以下結果:

x after swap: 13, 14
y after swap: 11, 12

示例

考慮另一種情況,我們將交換元組的元素。

#include <iostream>
#include <tuple>
using namespace std;
int main()
{
    tuple<int, string> x = make_tuple(1, "Vespa");
    tuple<int, string> y = make_tuple(2, "Activa");
    swap(get<1>(x), get<1>(y));
    cout << "x after swap: " << get<0>(x) << ", " << get<1>(x) << endl;
    cout << "y after swap: " << get<0>(y) << ", " << get<1>(y) << endl;
    return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

x after swap: 1, Activa
y after swap: 2, Vespa

示例

在下面的例子中,我們將交換向量中的一個元組。

#include <iostream>
#include <vector>
#include <tuple>
int main()
{
    std::vector<std::tuple<int, int>> x{{1, 2}, {11, 22}};
    std::swap(x[0], x[1]);
    std::cout << "After swapping:\n";
    for (const auto& a : x) {
        std::cout << std::get<0>(a) << " " << std::get<1>(a) << std::endl;
    }
    return 0;
}

輸出

以下是上述程式碼的輸出:

After swapping:
11 22
1 2

示例

讓我們考慮下面的例子,我們將交換空元組。

#include <iostream>
#include <tuple>
using namespace std;
int main()
{
    tuple<int, string> x;
    tuple<int, string> y;
    swap(x, y);
    cout << "x after swap: (" << get<0>(x) << ", " << get<1>(x) << ")" << endl;
    cout << "y after swap: (" << get<0>(y) << ", " << get<1>(y) << ")" << endl;
    return 0;
}

輸出

上述程式碼的輸出如下:

x after swap: (0, )
y after swap: (0, )
廣告