Pergunta

É isso que pretendo fazer ...

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

Onde x é o tamanho do vetor var_name ey é o tamanho do vetor dentro do par.

A instrução acima não funciona porque o modelo de par permite apenas constantes.Como posso fazer com que meus dois vetores tenham o tamanho de xey, respectivamente?

Foi útil?

Solução

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

Outras dicas

Simplifique como:

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

Se você gosta da sua própria sintaxe, deve fazer o seguinte:

vector<pair<vector<int>,int> > var_name(x, std::make_pair(vector<int>(y), 0));

Você pode usar make_pair de <utility> para construir o par com o qual deseja inicializar seu vector.Por exemplo:

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

ou chame o construtor pair<vector<int>,int> diretamente (como parece que você está tentando):

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

pair<vector<int>,int> é o nome de um tipo. Para a inicialização, você precisa de um valor.

Você obtém um valor chamando o construtor do tipo (da mesma forma que, no nível superior da instrução, você está fazendo para var_name). Como isso é criar um valor in-line em uma expressão, em vez de inicializar uma variável, não há nome de variável e apenas escrevemos algo como pair<vector<int>,int>(...). O ... são os argumentos para o construtor (colocar (y) em qualquer lugar dentro dos colchetes angulares é ilógico). Em nosso caso, queremos que o primeiro valor seja um vetor de comprimento y e o segundo valor seja ... 0, suponho.

Então, obtemos pair<vector<int>,int>(vector<int>(y), 0). Isso é um tanto pesado, e é por isso que a biblioteca padrão fornece a função de modelo std::make_pair. Ele contorna o fato de que os argumentos de modelo não podem ser inferidos para construtores, usando uma função livre (que pode fazer inferência com argumentos de modelo) para chamar o construtor.

Assim, o acima é reduzido para make_pair(vector<int>(y), 0), que, quando substituído no resto da linha, fornece a resposta de Benjamin Lindley.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top