当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++11 std::initializer_list用法及代码示例


std::initializer_list 类模板是在 C++ 11 中添加的,包含许多内置函数,用于使用初始值设定项列表执行各种操作。它提供了诸如 size()、begin()、end() 和构造函数之类的成员函数来构造、迭代和访问初始值设定项列表的元素。

要使用initializer_list,您需要包含<initializer_list>C++ 程序中的标头。

C++ 中的 std::initializer_list

在 C++ 中,std::initializer_list 是一个类模板,它允许我们使用值列表初始化轻量级对象。初始值设定项列表用于以方便的方式为变量、数组、类、函数、类的构造函数以及向量等标准容器设置值。

用法

initializer_list<T> name_of_list= { };
  • 支撑初始化r用于构造initializer_list的对象。
  • 它通常作为数组的包装器来实现。
  • 与向量等标准容器不同,复制初始值设定项列表的对象不会将整个元素复制到复制列表中。但初始值设定项列表的原始对象和复制对象都包含相同的元素。

C++ 中的 std::initializer_list 示例

示例 1:

下面的示例演示了 C++ 中初始化列表的使用。

C++


// C++ program to demonstrate the use of initializer list 
#include <initializer_list> 
#include <iostream> 
using namespace std; 
  
int main() 
{ 
    // Initializing an object using initializer_list 
    initializer_list<int> num = { 2, 4, 6, 8, 10, 12 }; 
  
    // Accessing elements 
    cout << "Numbers in the list are: "; 
    for (int it : num) { 
        cout << it << " "; 
    } 
    return 0; 
}
输出
Numbers in the list are: 2 4 6 8 10 12 

Note Member initializer list and initializer_list are not the same. Both are different, it should not be confused with each other.

示例 2:

编写程序来说明如何使用 initializer_list 来构造对象。

C++


// C++ program to illustrate the use of initializer_list in 
// object construction 
#include <iostream> 
using namespace std; 
#include <initializer_list> 
  
// array type container constructed using initializer list 
template <typename T> class MyContainer { 
public: 
    // Constructor taking initializer_list as a parameter 
    MyContainer(initializer_list<T> values) 
        : list(values) 
    { 
    } 
  
    // Function to print all elements 
    void printList() const
    { 
        for (const T& value : list) { 
            cout << value << " "; 
        } 
        cout << endl; 
    } 
  
private: 
    initializer_list<T> list; 
}; 
  
// diver code 
int main() 
{ 
    // Creating an instance of MyContainer with 
    // initializer_list of int type 
    MyContainer<int> intContainer = { 1, 2, 3, 4, 5 }; 
    cout << "Elements of Integer type are: "; 
    intContainer.printList(); 
    cout << endl; 
  
    // Creating an instance of MyContainer with 
    // initializer_list of double type 
    cout << "Elements of double type are: "; 
    MyContainer<double> doubleContainer 
        = { 1.1, 2.2, 3.3, 4.4, 5.5 }; 
    doubleContainer.printList(); 
    cout << endl; 
  
    return 0; 
}
输出
Elements of Integer type are: 1 2 3 4 5 

Elements of double type are: 1.1 2.2 3.3 4.4 5.5 

std::initializer_list的成员函数

以下是std::initialzer_list类的一些常用成员函数:

S. 编号

函数名称

说明

1

begin()

返回指向初始值设定项列表的第一个元素的指针。

2

end()

返回指向初始值设定项列表的最后一个元素的指针。

3

size()

size() 函数返回初始值设定项列表中存在的元素数量。

4

empty()

如果初始值设定项列表为空,则此函数返回 true。否则为假。

5

data()

返回指向底层数组容器的指针。

initializer_list的应用

除了构造对象之外,初始化列表还可用于以下情况:

1. 可变函数参数

<initializer_list> 用于将可变数量的参数传递给函数。

示例

下面的示例演示了将初始值设定项列表传递给函数。

C++


// C++ program to demonstrate the passing of initializer 
// list to a function. 
  
#include <iostream> 
using namespace std; 
#include <initializer_list> 
  
void myFunction(initializer_list<int> myList) 
{ 
  
    // Print the size (length) of myList 
    cout << "Size of myList: " << myList.size(); 
    cout << "\n"; 
  
    // Print elements of myList 
    cout << "Elements of myList: "; 
  
    // iterate to all the values of myList 
    for (int value : myList) { 
  
        // Print value at each iteration 
        cout << value << " "; 
    } 
} 
  
int main() 
{ 
    // Using initializer list when calling a function 
    myFunction({ 1, 2, 3, 4, 5 }); 
  
    return 0; 
}
输出
Size of myList: 5
Elements of myList: 1 2 3 4 5 

2. 将数据存储在连续内存中

initializer_list 容器的元素可用于存储数据,因为它是一个轻量级容器。

示例

下面的示例演示了如何使用基于范围的循环来访问 initializer_list 的元素。

C++


// C++ program to demonstrate the use of range based loops to access elements of initializer_list. 
  
#include <iostream> 
using namespace std; 
#include <initializer_list> 
  
int main() { 
    initializer_list<int> list = {1, 2, 3, 4, 5}; 
  
    // Using range-based for loop 
    for (int value : list) { 
        cout << value << " "; 
    } 
  
    cout << endl; 
    return 0; 
} 
输出
1 2 3 4 5 

3. 初始化标准容器

initializer_list 可用于使用元素列表初始化标准容器 就像向量一样。

示例

下面的示例演示了如何使用initializer_list来初始化标准容器。

C++


// C++ program to demonstrate the use of initializer_list to 
// initialize standard containers. 
  
#include <iostream> 
#include <vector> 
using namespace std; 
#include <initializer_list> 
  
void printVector(initializer_list<int> list) 
{ 
  
    //  initialize vector using initializer_list 
    vector<int> myVector(list); 
  
    // Printing the elements of vector 
    for (int value : myVector) { 
        cout << value << " "; 
    } 
    cout << endl; 
} 
  
int main() 
{ 
  
    // pass initializer_list to function 
    printVector({ 1, 2, 3, 4, 5 }); 
  
    return 0; 
}
输出
1 2 3 4 5 

4. 初始化列表作为返回类型

initializer_list 可以用作从任何函数返回列表的返回类型。它允许函数返回多个值。

示例

下面的示例演示了如何使用 initializer_list 作为返回类型。

C++


// C++ program to demonstratethe use of initializer_list as 
// return type. 
  
#include <initializer_list> 
#include <iostream> 
#include <vector> 
using namespace std; 
  
initializer_list<int> getNumbers() 
{ 
    return { 1, 2, 3, 4, 5 }; 
} 
  
int main() 
{ 
    auto num = getNumbers(); 
    // Use the generated numbers 
    for (auto it : num) { 
        cout << it << " "; 
    } 
    return 0; 
}
输出
1 2 3 4 5 

initializer_list的限制

初始化列表也有一些与之相关的限制:

  • 尺寸无法更改:initializer_list的大小在编译时是固定的。它不具有矢量等标准容器的动态特性。初始化程序的大小一旦创建就无法更改。
  • 无法随机访问元素:initializer_list仅支持前向迭代。我们无法使用索引作为标准容器来访问所需的或随机的元素。
  • 不可变元素:initializer_list 中的元素是不可变的。创建列表后,将无法修改这些值。任何通过迭代器或任何其他方式修改元素的尝试都将导致编译错误。


相关用法


注:本文由纯净天空筛选整理自manikandansanmugam大神的英文原创作品 std::initializer_list in C++ 11。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。