pair<vector<int>,int>
- это имя типа. Для инициализации вам нужно значение.
Вы получаете значение, вызывая конструктор типа (так же, как на верхнем уровне оператора вы делаете для var_name
). Так как это создает значение в строке в выражении, а не инициализирует переменную, имя переменной отсутствует, и мы просто пишем что-то вроде pair<vector<int>,int>(...)
. ...
- аргументы для конструктора (ставить (y)
в любом месте внутри угловых скобок нелогично). В нашем случае мы хотим, чтобы первым значением был вектор длины y, а вторым значением было бы ... 0, я полагаю.
Итак, мы получаем pair<vector<int>,int>(vector<int>(y), 0)
. Это довольно громоздко, поэтому стандартная библиотека предоставляет функцию шаблона std::make_pair
. Он обходит тот факт, что аргументы шаблона не могут быть выведены для конструкторов, используя свободную функцию (которая может делать вывод с аргументами шаблона) для вызова конструктора.
Таким образом, приведенное выше сокращается до make_pair(vector<int>(y), 0)
, что, когда подставляется в остальную часть строки, дает ответ Бенджамина Линдли.