В c++11 можно использовать списки инициализаторов для инициализации параметров в функциях. В чем его цель? Не может ли быть сделано то же самое с константными векторами? В чем разница между двумя программами ниже?список инициализаторов против вектора
Использование списка инициализатора:
#include <iostream>
using namespace std;
int sumL(initializer_list<int> l){
int sum = 0;
for (const auto i: l){
sum += i;
}
return sum;
}
int main(){
cout << sumL({1, 2, 3}) << "\n";
return 0;
}
Используя константный вектор:
#include <iostream>
#include <vector>
using namespace std;
int sumV(const vector<int> l){
int sum = 0;
for (const auto i: l){
sum += i;
}
return sum;
}
int main(){
cout << sumV({1, 2, 3}) << "\n";
return 0;
}
Второй код требует больше, чем необходимо (и вектор построен также с помощью initializer_list) –
Offtopic: обратите внимание, что вы делаете копию вектора, т. Е. Вы не использовали ссылку &. То же самое имеет место в цикле for, теперь это просто int, но с более крупными объектами ссылка избежит того, что вы копируете каждый объект в вектор. – Michiel