Кратко
std::initializer_list
: Стандартный класс-шаблон для инициализации объектов фиксированным набором значений.- Преимущества: Удобство, улучшение читаемости, передача множества аргументов.
- Примеры использования: Конструкторы, функции, инициализация контейнеров.
Подробнее
Преимущества использования std::initializer_list
- Удобная инициализация объектов.
- Улучшение читаемости кода.
- Позволяет передавать множество аргументов одной функции.
Использование в функциях
#include <iostream>
#include <initializer_list>
void printList(std::initializer_list<int> list) {
for (auto elem : list) {
std::cout << elem << " ";
}
std::cout << std::endl;
}
int main() {
printList({10, 20, 30, 40}); // Передача списка значений
return 0;
}
Вывод:
10 20 30 40
Пример использования в конструкторе (жесть)
#include <iostream>
#include <initializer_list>
class MyClass {
private:
int* data;
size_t size;
public:
// Конструктор с initializer_list
MyClass(std::initializer_list<int> list) : size(list.size()) {
data = new int[size];
size_t index = 0;
for (auto elem : list) {
data[index++] = elem;
}
}
~MyClass() {
delete[] data;
}
void printData() const {
for (size_t i = 0; i < size; ++i) {
std::cout << data[i] << " ";
}
std::cout << std::endl;
}
};
int main() {
MyClass obj = {1, 2, 3, 4, 5}; // Инициализация с использованием initializer_list
obj.printData(); // Вывод: 1 2 3 4 5
return 0;
}
Вывод:
1 2 3 4 5
Класс с инициализацией массива
#include <iostream>
#include <initializer_list>
#include <vector>
class MyClass {
private:
std::vector<int> data;
public:
MyClass(std::initializer_list<int> list) : data(list) {
// Инициализация вектора с помощью initializer_list
}
void printData() const {
for (int elem : data) {
std::cout << elem << " ";
}
std::cout << std::endl;
}
};
int main() {
MyClass obj = {5, 10, 15, 20, 25};
obj.printData(); // Вывод: 5 10 15 20 25
return 0;
}