當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++14 std::integer_sequence用法及代碼示例


編程時,開發人員經常需要循環和迭代。有時,需要循環遍曆跨度未知的數字範圍,std::integer 序列在這種情況下很有用。

通過使用C++14提供的std::integer_sequence,可以在編譯時創建一個整數序列。程序在運行之前就知道整數的序列。有了這個工具,就可以進行模板編程,meta-programming,讓編碼變得不那麽複雜。

當 std::integer_sequence 用作函數模板的參數時,可以推導表示元素序列的參數包 Ints 並將其用於包擴展。

用法

template <typename T, T... Ints>
struct integer_sequence;

其中 struct 用於用 Ints 中給定的值定義整數序列。

模板參數

  • T:它是整數的類型。
  • Ints:它是一個整數參數包。

會員函數

  • size():它返回由參數包 Ints 表示的元素序列中的元素數量。

std::integer_sequence 的示例

示例 1:

在下麵的代碼中,我們將利用上述語法來演示 C++ 14 中 std::integer_sequence 的使用。

C++


#include <iostream> 
#include <utility> 
using namespace std; 
  
template <typename T, T... Is> 
void print_sequence(integer_sequence<T, Is...>) 
{ 
    cout << "The sequence is: "; 
    ((cout << Is << ' '), 
     ...); // fold expression to print sequence 
} 
  
int main() 
{ 
    print_sequence(integer_sequence<int, 1, 2, 3, 4>{}); 
    return 0; 
}

輸出

The sequence is: 1 2 3 4

解釋:

在此代碼中,std::integer 序列參數被傳遞給在此代碼中定義的 print_sequence 函數。然後該函數打印其值。通過使用折疊表達式將序列打印在由空格分隔的單行上。

示例 2:

在下麵的代碼中,integer_sequence_size 結構體使用模板專門化來遞歸計算integer_sequence 的大小。

C++


#include <iostream> 
#include <utility> 
using namespace std; 
  
// Struct to calculate the size of an integer_sequence 
template <typename T, T... Ints> 
struct integer_sequence_size; 
  
// Partial specialization for an integer_sequence with at 
// least one element 
template <typename T, T Head, T... Tail> 
struct integer_sequence_size<T, Head, Tail...> { 
    static constexpr size_t value 
        = 1 + integer_sequence_size<T, Tail...>::value; 
}; 
  
// Specialization for an empty integer_sequence 
template <typename T> struct integer_sequence_size<T> { 
    static constexpr size_t value = 0; 
}; 
  
int main() 
{ 
    // Define an integer_sequence 
    using my_sequence 
        = integer_sequence<int, 0, 1, 2, 3, 4>; 
  
    // Print the size of the integer_sequence using the 
    // custom struct 
    std::cout 
        << "Size: "
        << integer_sequence_size<int, 0, 1, 2, 3, 4>::value 
        << endl; 
    // Output: Size: 5 
  
    return 0; 
}
輸出
Size: 5

在 C++ 14 中使用 std::integer_sequence 的優點是:

  • 簡化模板元編程:通過提供一種生成編譯時整數序列的簡單方法,std::integer 序列簡化了 C++14 中的模板元編程。它減少了混亂和不準確的遞歸模板函數的必要性。
  • 提高可讀性:通過使用 std::integer 序列,您可以編寫更簡單的代碼,因為它消除了對複雜模板函數調用的要求。
  • 啟用包擴展:Std::integer 序列允許擴展參數包,從而能夠創建高效的代碼。此外,它還能夠處理大量模板參數。


相關用法


注:本文由純淨天空篩選整理自krishna_97大神的英文原創作品 std::integer_sequence in C++ 14。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。