Classe e objetos
Uma classe é um conjunto de variáveis e funções que funcionam juntas, onde as variáveis não têm valores atribuídos. Quando os valores são atribuídos às variáveis, uma classe se torna um objeto. Valores diferentes dados à mesma classe resultam em objetos diferentes; isto é, objetos diferentes podem ser da mesma classe, mas têm valores diferentes. Criar um objeto de uma classe também é conhecido como instanciando o objeto.
O termo vetor descreve uma classe. Um objeto criado a partir de um vetor tem um nome escolhido pelo programador.
É necessária uma função que pertence a uma classe para instanciar um objeto da classe. Em C ++, essa função tem o mesmo nome que o nome da classe. Diferentes objetos criados (instanciados) da classe têm nomes distintos dados a cada um deles pelo programador.
Criar um objeto de uma classe significa construir o objeto; também significa instantar o objeto.
A classe vetorial
A classe vetorial já foi definida e está na biblioteca. Para usar a classe vetorial, um programador deve incluir o cabeçalho do vetor no arquivo com a seguinte diretiva de pré -processamento:
#incluir
Depois que o cabeçalho está incluído, todos os recursos do vetor (membros de dados e funções membros) se tornam acessíveis. Para usar o objeto de contagem para produzir dados para o terminal (console), o cabeçalho do objeto também deve ser incluído. Para escrever um programa com o vetor, no mínimo, os seguintes cabeçalhos devem ser incluídos:
#incluir
#incluir
Instanciando um vetor
int foo [10];
Acima está a declaração de uma matriz com o nome "Foo" e o número de elementos "10.”Esta é uma variedade de números inteiros. A declaração de um vetor é semelhante. Para um vetor, o número de elementos é opcional, pois o comprimento do vetor pode aumentar ou diminuir.
Neste ponto do programa, a classe vetorial já foi definida na biblioteca, e o cabeçalho foi incluído. O vetor pode ser instanciado da seguinte maneira:
std :: vetorvtr (8);
Aqui, o vetor é da função de construtor especial. O tipo de dados que o vetor manterá é "int", em suportes de ângulo. O termo "vtr" é o nome escolhido pelo programador para o vetor. Finalmente, "8", entre parênteses, é o número tentativo de números inteiros que o vetor terá.
O termo "std" significa espaço para nome padrão. Este termo deve ser seguido por um cólon duplo, neste contexto. Qualquer um pode escrever sua própria biblioteca de classe vetorial e usá -la. No entanto, o C ++ já possui uma biblioteca padrão com nomes padrão, incluindo “Vector.”Para usar um nome padrão, o nome padrão deve ser precedido por std :: . Para evitar digitar STD :: Cada vez no programa para um nome padrão, o arquivo do programa pode iniciar o seguinte:
#incluir
#incluir
usando namespace std;
Sobrecarregando uma função
Quando duas ou mais assinaturas de função diferentes têm o mesmo nome, esse nome é considerado sobrecarregado. Quando uma função é chamada, o número e o tipo de argumentos determinam qual função é executada.
Construindo um vetor
Construir um vetor significa instanciando (criando) um objeto vetorial. A função construtora está sobrecarregada da seguinte forma:
Nome do vetor
Isso cria um vetor de comprimento zero e digite “t."A declaração a seguir cria um vetor de comprimento zero do tipo" Float "com o nome" VTR: "
vetorvtr;
Nome do vetor (n)
Isso cria um vetor com n elementos do tipo “t.”Uma declaração para este vetor com quatro elementos flutuantes é o seguinte:
vetorvtr (4);
Nome do vetor (n, t)
Isso cria um vetor de n elementos inicializados para o valor t. A afirmação a seguir cria um vetor de 5 elementos, onde cada elemento tem o valor 3.4:
vetorVTR (5, 3.4);
Construindo com inicialização
Um vetor pode ser construído (criado) e inicializado ao mesmo tempo, de uma das duas maneiras a seguir:
vetorvtr = 1.1, 2.2, 3.3, 4.4;
Ou
vetorVtr 1.1, 2.2, 3.3, 4.4;
Observe que não há parênteses logo após o nome do objeto. Parênteses usados logo após o nome do objeto deve ter a lista de inicializadores, como segue:
vetorvtr (1.1, 2.2, 3.3, 4.4);
Um vetor pode ser construído e inicializado posteriormente com a lista de inicializador. Nesse caso, os parênteses não serão usados:
vetorvtr;
vtr = 1.1, 2.2, 3.3, 4.4;
Vector V2 (V1)
Este é um construtor de cópia. Cria um vetor V2 como uma cópia do vetor V1. O código a seguir ilustra o seguinte:
vetorVtr1 (5, 3.4);
vetorvtr2 (vtr1);
Atribuindo um vetor durante a construção
Durante a construção, um vetor vazio pode ser criado enquanto outro é atribuído a ele, como segue:
vetorVtr1 1.1, 2.2, 3.3, 4.4;
vetorvtr2 = vtr1;
A segunda declaração é equivalente a:
vetorvtr2 = 1.1, 2.2, 3.3, 4.4;
const vetor
Um vetor const é um vetor cujos elementos não podem ser alterados. Os valores neste vetor são somente leitura. Quando criado, o vetor aparece o seguinte:
const vetorVtr 1.1, 2.2, 3.3, 4.4;
Neste tipo de vetor, nenhum elemento pode ser adicionado ou removido. Além disso, nenhum valor pode ser alterado.
Construindo com o iterador
Um modelo fornece uma representação genérica para um tipo de dados. Um iterador fornece uma representação genérica de digitalização através dos valores de um contêiner. A sintaxe para criar um vetor com um iterador é o seguinte:
modelo
vetor (inputIterator primeiro, inputIterator Último, const alocator & = alocator ());
Isso constrói um vetor para o intervalo [primeiro, último) usando o alocador especificado, que será discutido mais adiante neste artigo.
Destruindo um vetor
Para destruir um vetor, basta permitir que ele saia do escopo e destrua é tratado automaticamente.
Capacidade do vetor
size_type capacidade () const Noexcept
O número total de elementos que o vetor pode manter sem exigir a realocação é retornado pela função de membro da capacidade. Um segmento de código para isso é o seguinte:
vetorvtr (4);
int num = vtr.capacidade();
cout << num << '\n';
A saída é 4.
Reserva (n)
O espaço de memória nem sempre está disponível gratuitamente. Espaço extra pode ser reservado com antecedência. Considere o seguinte segmento de código:
vetorvtr (4);
vtr.reserva (6);
cout << vtr.capacity() << '\n';
A saída é 6. Então, o espaço extra reservado é 6 - 4 = 2 elementos. A função retorna vazios.
tamanho () const noexcept
Isso retorna o número de elementos no vetor. O código a seguir ilustra esta função:
vetorvtr (4);
flutuar sz = vtr.tamanho();
cout << sz << '\n';
A saída é 4.
encolher para caber()
Depois de fornecer capacidade extra para um vetor com a função Reserve (), o vetor pode ser dimensionado para se encaixar no seu tamanho original. O código a seguir ilustra o seguinte:
vetorvtr (4);
vtr.reserva (6);
vtr.encolher para caber();
int sz = vtr.tamanho();
cout << sz << '\n';
A saída é 4 e não 6. A função retorna vazios.
redimensionar (sz), redimensionar (sz, c)
Isso redimensiona o vetor. Se o novo tamanho for menor que o tamanho antigo, os elementos no final serão apagados. Se o novo tamanho for mais longo, algum valor padrão será adicionado ao final. Para ter um valor adicionado específico, use a função redize () com dois argumentos. O segmento de código a seguir ilustra o uso dessas duas funções:
vetorVtr1 1.1, 2.2, 3.3, 4.4;
vtr1.redimensionar (2);
cout << "New size of vtr1: " << vtr1.size() << '\n';
vetorVtr2 1.1, 2.2;
Vtr2.redimensionar (4, 8.8);
cout << "vtr2: "<< vtr2[0] <<" "<< vtr2[1] <<"
"<< vtr2[2] <<" "<< vtr2[3] << '\n';
A saída é a seguinte:
Novo tamanho de Vtr1: 2
Vtr2: 1.1 2.2 8.8 8.8
As funções retornam vazio.
vazio () const Noexcept
Esta função retorna 1 para verdadeiro se não houver elementos no vetor e 0 para false se o vetor estiver vazio. Se um vetor tiver 4 locais para um tipo específico de dados, como flutuação, sem nenhum valor de flutuação, esse vetor não está vazio. O código a seguir ilustra o seguinte:
vetorvtr;
cout << vtr.empty() << '\n';
vetorvt (4);
cout << vt.empty() << '\n';
vetorv (4,3.5);
cout << v.empty() << '\n';
A saída é a seguinte:
1Acesso ao elemento vetorial
Um vetor pode ser sub-roteiro (indexado) como uma matriz. A contagem de índice começa de zero.
vectorname [i]
A operação "VectorName [i]" retorna uma referência ao elemento no Iº índice do vetor. O código seguinte sai 3.3 para o vetor acima:
vetorVtr 1.1, 2.2, 3.3, 4.4;
flutuar fl = vtr [2];
cout << fl << '\n';
vectorname [i] const
A operação "VectorName [i] const" é executada em vez de "vectorname [i]" quando o vetor é um vetor constante. Esta operação é usada no seguinte código:
const vetorVtr 1.1, 2.2, 3.3, 4.4;
flutuar fl = vtr [2];
cout << fl << '\n';
A expressão retorna uma referência constante ao iº elemento do vetor.
Atribuir um valor com subscrito
Um valor pode ser atribuído a um vetor não constante, como segue:
vetorVtr 1.1, 2.2, 3.3, 4.4;
VTR [2] = 8.8;
cout << vtr[2] << '\n';
A saída é 8.8.
vectorname.em (i)
“VECTORNAME.AT (i) "é como" VECTORNAME [i] ", mas" Vectorname.em (i) ”é mais confiável. O código a seguir mostra como esse vetor deve ser usado:
vetorVtr 1.1, 2.2, 3.3, 4.4;
flutuar fl = vtr.em (2);
cout << fl << '\n';
em () é uma função de membro vetorial.
vectorname.em (i) const
“VECTORNAME.AT (i) const ”é como“ VECTORNAME [i] const ”, mas“ VecTorName.em (i) const ”é mais confiável. “VECTORNAME.em (i) const ”é executado em vez de“ VecTorname.em (i) ”quando o vetor é um vetor constante. Este vetor é usado no seguinte código:
const vetorVtr 1.1, 2.2, 3.3, 4.4;
flutuar fl = vtr.em (2);
cout << fl << '\n';
em () const é uma função de membro vetorial.
Atribuindo um valor com a função AT ()
Um valor pode ser atribuído a um vetor não constante com a função AT (), como segue:
vetorVtr 1.1, 2.2, 3.3, 4.4;
vtr.em (2) = 8.8;
cout << vtr[2] << '\n';
A saída é 8.8.
Problema com sub-scripts
O problema com a sub-scripts (indexação) é que, se o índice estiver fora do alcance, o zero poderá ser retornado ou um erro poderá ser emitido em tempo de execução.
frente()
Isso retorna uma referência ao primeiro elemento do vetor sem remover o elemento. A saída do código a seguir é 1.1.
vetorVtr 1.1, 2.2, 3.3, 4.4;
flutuar fl = vtr.frente();
cout << fl << '\n';
O elemento não é removido do vetor.
frente () const
Quando a construção do vetor é precedida por const, a expressão "front () const" é executada em vez de "front ().”Isso é usado no seguinte código:
const vetorVtr 1.1, 2.2, 3.3, 4.4;
flutuar fl = vtr.frente();
cout << fl << '\n';
Uma referência constante é retornada. O elemento não é removido do vetor.
voltar()
Isso retorna uma referência ao último elemento do vetor sem remover o elemento. A saída do código a seguir é 4.4.
vetorVtr 1.1, 2.2, 3.3, 4.4;
flutuar fl = vtr.voltar();
cout << fl << '\n';
Back () const
Quando a construção do vetor é precedida pela const, a expressão "Back () const" é executada em vez de "traseiro ().”Isso é usado no seguinte código:
const vetorVtr 1.1, 2.2, 3.3, 4.4;
flutuar fl = vtr.voltar();
cout << fl << '\n';
Uma referência constante é retornada. O elemento não é removido do vetor.
Acesso de dados vetoriais
data () NoExcept; data () const NoExcept;
Qualquer um deles retorna um ponteiro de modo que [data (), data () + size ()) é um intervalo válido.
Isso será abordado com mais detalhes mais tarde no artigo.
Iteradores retornando e o vetor
Um iterador é como um ponteiro, mas tem mais funcionalidade do que um ponteiro.
Begin () NoExcept
Retorna um iterador que aponta para o primeiro elemento do vetor, como no seguinte segmento de código:
vetorVtr 1.1, 2.2, 3.3, 4.4;
vetor:: iterator iter = vtr.começar();
cout << *iter << '\n';
A saída é 1.1. Observe que a declaração que recebe o iterador foi declarada. O iterador é desreferenciado em uma expressão de retorno para obter o valor da mesma maneira que um ponteiro é desreferenciado.
BEGIN () const NoExcept;
Retorna um iterador que aponta para o primeiro elemento do vetor. Quando a construção do vetor é precedida pela const, a expressão "Begin () const" é executada em vez de "Begin ().”Sob esta condição, o elemento correspondente no vetor não pode ser modificado. Isso é usado no seguinte código:
const vetorVtr 1.1, 2.2, 3.3, 4.4;
vetor:: const_iterator iter = vtr.começar();
cout << *iter << '\n';
A saída é 1.1. Observe que "const_iterator" foi usado desta vez, em vez de apenas "iterador" para receber o iterador devolvido.
end () noexcept
Retorna um iterador que aponta imediatamente além do último elemento do vetor. Considere o seguinte segmento de código:
vetorVtr 1.1, 2.2, 3.3, 4.4;
vetor:: iterator iter = vtr.fim();
cout << *iter << '\n';
A saída é 0, o que não tem sentido, pois não há elemento concreto além do último elemento.
end () const noexcept
Retorna um iterador que aponta imediatamente além do último elemento do vetor. Quando a construção do vetor é precedida por "const", a expressão "end () const" é executada em vez de "end (end ().”Considere o seguinte segmento de código:
const vetorVtr 1.1, 2.2, 3.3, 4.4;
vetor:: const_iterator iter = vtr.fim();
cout << *iter << '\n';
A saída é 0. Observe que "const_iterator" foi usado desta vez, em vez de apenas "iterador" para receber o iterador devolvido.
Iteração reversa
É possível ter um iterador que itera do final para pouco antes do primeiro elemento.
rBegin () NoExcept
Retorna um iterador que aponta para o último elemento do vetor, como no seguinte segmento de código:
vetorVtr 1.1, 2.2, 3.3, 4.4;
vetor:: reverse_iterator riter = vtr.rBegin ();
cout << *rIter << '\n';
A saída é 4.4.
Observe que a declaração que recebe o iterador reverso foi declarada. O iterador é desreferenciado em uma expressão de retorno para obter o valor da mesma maneira que um ponteiro é desreferenciado.
rBegin () const Noexcept;
Retorna um iterador que aponta para o último elemento do vetor. Quando a construção do vetor é precedida por "const", a expressão "rBegin () const" é executada em vez de "rbegin ().”Sob esta condição, o elemento correspondente no vetor não pode ser modificado. Este recurso é usado no seguinte código:
const vetorVtr 1.1, 2.2, 3.3, 4.4;
vetor:: const_reverse_iterator riter = vtr.rBegin ();
cout << *rIter << '\n';
A saída é 4.4.
Observe que o const_reverse_iterator foi usado desta vez, em vez de apenas o reverse_iterator, para receber o iterador devolvido.
rend () noexcept
Retorna um iterador que aponta pouco antes do primeiro elemento do vetor. Considere o seguinte segmento de código:
vetorVtr 1.1, 2.2, 3.3, 4.4;
vetor:: reverse_iterator riter = vtr.rend ();
cout << *rIter << '\n';
A saída é 0, o que não tem sentido, pois não há elemento concreto antes do primeiro elemento.
rend () const noexcept
Retorna um iterador que aponta pouco antes do primeiro elemento do vetor. Quando a construção do vetor é precedida por "const", a expressão "rend () const" é executada em vez de "rend ().”Considere o seguinte segmento de código:
const vetorVtr 1.1, 2.2, 3.3, 4.4;
vetor:: const_reverse_iterator riter = vtr.rend ();
cout << *rIter << '\n';
A saída é 0.
Observe que o const_reverse_iterator foi usado desta vez, em vez de apenas o reverse_iterator, para receber o iterador devolvido.
Modificadores de vetor
Um modificador que modifica o vetor pode levar ou devolver um iterador.
a.Emplace (P, Args)
Insira um objeto do tipo t construído com std :: forward (args)… antes de P.
Para detalhes - veja mais tarde
Inserir (IteratorPosition, valor)
Insere uma cópia do valor na posição do iterador do vetor. Retorna o iterador (posição) no vetor onde a cópia foi colocada. O código a seguir mostra onde o valor foi colocado:
vetorvtr 10, 20, 30, 40;
vetor:: iterator iter = vtr.começar();
++iter;
++iter;
vtr.inserir (iter, 25);
cout << vtr[1] << " << vtr[2]<< '
' << vtr[3] << '\n';
A saída é: 20 25 30.
Observe que o iterador foi avançado (incrementado) como um ponteiro.
Uma lista de inicializadores também pode ser inserida, como ilustra o código a seguir:
vetorvtr 10, 20, 30, 40;
vetor:: iterator iter = vtr.começar();
++iter;
++iter;
vtr.inserir (iter, 25, 28);
cout << vtr[1] << " << vtr[2]<< '
' << vtr[3]<< " << vtr[4] << '\n';
A saída é: 20 25 28 30.
Apagar (posição)
Remove um elemento na posição apontado pelo iterador e depois retorna a posição do iterador. O código a seguir ilustra o seguinte:
vetorvtr 10, 20, 30, 40;
vetor:: iterator iter = vtr.começar();
++iter;
++iter;
vtr.apagar (iter);
cout << vtr[0] << " << vtr[1] << '
' << vtr[2]<< '\n';
A saída é: 10 20 40
push_back (t), push_back (rv)
Usado para adicionar um único elemento no final do vetor. Use push_back (t) da seguinte forma:
vetorVtr 1.1, 2.2, 3.3, 4.4;
vtr.push_back (5.5);
flutuar fl = vtr [4];
cout << fl << '\n';
A saída é 5.5.
push_back (rv): - Veja mais tarde.
pop_back ()
Remove o último elemento sem devolvê -lo. O tamanho do vetor é reduzido por 1. O código a seguir ilustra o seguinte:
vetorVtr 1.1, 2.2, 3.3, 4.4;
vtr.pop_back ();
flutuar sz = vtr.tamanho();
cout << sz << '\n';
A saída é 3.
a.troca (b)
Dois vetores podem ser trocados, conforme ilustrado no seguinte segmento de código:
vetorVtr1 1.1, 2.2, 3.3, 4.4;
vetorvtr2 10, 20;
vtr1.troca (vtr2);
cout << "vtr1: "<< vtr1[0] <<" "<< vtr1[1] <<"
"<< vtr1[2] <<" "<< vtr1[3] << '\n';
cout << "vtr2: "<< vtr2[0] <<" "<< vtr2[1] <<"
"<< vtr2[2] <<" "<< vtr2[3] << '\n';
A saída é:
Vtr1: 10 20 0 0
Vtr2: 1.1 2.2 3.3 4.4
Observe que o comprimento de um vetor é aumentado, se necessário. Além disso, os valores que não tiveram substituições são substituídos por algum valor padrão.
claro()
Remove todos os elementos do vetor, como ilustra o seguinte segmento de código:
vetorVtr 1.1, 2.2, 3.3, 4.4;
vtr.claro();
cout << vtr.size() << '\n';
A saída é 0.
Igualdade e operadores relacionais para vetores
O operador ==
Retorna 1 para verdadeiro se os dois vetores tiverem o mesmo tamanho e os elementos correspondentes forem iguais; Caso contrário, ele retorna 0 para falso. Por exemplo:
vetorU 1, 2, 3;
vetorV 4, 5, 6;
bool bl = u == v;
cout << bl << '\n';
A saída é 0.
O != Operador
Retorna 1 para verdadeiro se os dois vetores não tiverem o mesmo tamanho e/ou os elementos correspondentes não forem iguais; Caso contrário, ele retorna 0 para falso. Por exemplo:
vetorU 1, 2, 3;
vetorV 4, 5, 6;
bool bl = u!= V;
cout << bl << '\n';
A saída é 1.
O < Operator
Retorna 1 para verdadeiro se o primeiro vetor for o subconjunto inicial do segundo vetor, com os elementos das duas partes iguais sendo iguais e na mesma ordem. Se ambos os vetores tiverem o mesmo tamanho e se move da esquerda para a direita e um elemento for encontrado no primeiro vetor que é menor que o elemento correspondente no segundo vetor, então eu ainda será retornado. Caso contrário, 0 para false é devolvido. Por exemplo:
vetorU 3, 1, 1;
vetorV 3, 2, 1;
bool bl = ucout << bl << '\n';
A saída é 1. < does not include the case when the size and order are the same.
O operador>
Retorna !(VOCÊ < V), where U is the first vector and V is the second vector, according to the above definitions.
O <= Operator
Retorna u <= V, where U is the first vector and V is the second vector, according to the above definitions.
O operador> =
Retorna !(VOCÊ <= V), where U is the first vector and V is the second vector, according to the above definitions.
Conclusão
Um vetor é um exemplo de um recipiente de sequência. Um vetor é uma forma "melhor" da matriz comum e é instanciada de uma classe. Os vetores têm métodos classificados em: Construção e atribuição, capacidade, acesso a elementos, acesso a dados, iteradores, modificadores e operadores sobrecarregados numéricos.
Existem outros contêineres de sequência, chamados list, Forward_list e Array. Se a tarefa envolver inserções e deleções frequentes no meio da sequência, uma lista ou forward_list devem ser usados. Se a tarefa envolver inserções e deleções frequentes no início ou no final da sequência, então um deque deve ser usado. E assim, os vetores devem ser usados apenas quando esses tipos de operações não forem importantes.