Qual é a maneira mais simples de converter array em vetor?
void test(vector<int> _array)
{
...
}
int x[3]={1, 2, 3};
test(x); // Syntax error.
Eu quero converter x de matriz int em vetor de maneira mais simples.
Use o vector
construtor que leva dois iteradores, observe que os ponteiros são iteradores válidos e use a conversão implícita de matrizes em ponteiros:
int x[3] = {1, 2, 3};
std::vector<int> v(x, x + sizeof x / sizeof x[0]);
test(v);
ou
test(std::vector<int>(x, x + sizeof x / sizeof x[0]));
onde sizeof x / sizeof x[0]
está obviamente 3
neste contexto; é a maneira genérica de obter o número de elementos em uma matriz. Observe que x + sizeof x / sizeof x[0]
aponta um elemento além do último elemento.
vector<int> a(5,10);
significamake room for 5
int` e inicializo-os com 10. Mas como o seu x, x + ... funciona? você pode explicar?vector<int>::vector(size_type, int)
, ele selecionavector<int>::vector(int*, int*)
, o que copia o intervalo indicado por esse par de ponteiros. O primeiro é sobrecarga (2), o segundo é sobrecarga (4) aquisizeof x / sizeof x[0] == std::extent<decltype(x)>::value
Pessoalmente, gosto bastante da abordagem C ++ 2011 porque não requer que você use
sizeof()
nem se lembre de ajustar os limites do array se você alterar os limites do array (e você pode definir a função relevante no C ++ 2003 se quiser também ):Obviamente, com C ++ 2011 você pode querer usar listas de inicializadores de qualquer maneira:
fonte
std::vector<T>
sempre possui osT
objetos. Isso tem duas implicações: ao inserir um objeto em um vetor, eles são copiados e colocados na memória. Para objetos razoavelmente pequenos, por exemplo, sequências de strings curtas, a colocação é um grande ganho de desempenho. Se seus objetos são grandes e caros para copiar, você pode querer armazenar ponteiros [de alguma forma gerenciados por recursos] para os objetos. Qual abordagem é mais eficiente depende dos objetos, mas você tem a escolha.Os ponteiros podem ser usados como qualquer outro iterador:
fonte
const size_t X_SIZE = 3;
para denotar o tamanho do array ou calculá-lo a partir de sizeof. Omiti essa parte por uma questão de legibilidade.Você está fazendo a pergunta errada aqui - em vez de forçar tudo em um vetor, pergunte como você pode converter teste em trabalho com iteradores em vez de um contêiner específico. Você também pode fornecer uma sobrecarga para manter a compatibilidade (e lidar com outros contêineres ao mesmo tempo gratuitamente):
torna-se:
O que permite que você:
( Demonstração Ideone )
fonte
Uma maneira simples pode ser o uso de uma
assign()
função pré-definida navector
aula.por exemplo
fonte