C ++: вектор> - PullRequest
       51

C ++: вектор>

3 голосов
/ 13 июня 2011

Это то, что я собираюсь сделать ...

vector < pair<vector<int>,int> > var_name (x, pair <vector<int>(y),int>);

Где x - размер вектора var_name, а y - размер вектора внутри пары.

Вышеприведенный оператор не работает, потому что шаблон пары допускает только константы.Как я могу получить оба моих вектора размером x и y соответственно?

Ответы [ 4 ]

7 голосов
/ 13 июня 2011
vector<pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 0));
1 голос
/ 13 июня 2011

Вы можете использовать make_pair из <utility>, чтобы построить пару, с которой вы хотите инициализировать vector. Например:

vector< pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 42))

или вызовите конструктор pair<vector<int>,int> напрямую (похоже, что вы пытаетесь это сделать):

vector< pair<vector<int>,int> > var_name(x, pair<vector<int>,int>(vector<int>(y), 0))

1 голос
/ 13 июня 2011

Упростите это как:

pair<vector<int>,int> value(vector<int>(y), 0);
vector<pair<vector<int>,int> > var_name(x, value);

Если вам нравится ваш собственный синтаксис, то вы должны сделать это:

0 голосов
/ 13 июня 2011

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), что, когда подставляется в остальную часть строки, дает ответ Бенджамина Линдли.

...