vectors stl
Papel Dos Vetores No STL Com Exemplos.
Até agora, nesta série C ++, vimos arrays estáticos que têm um tamanho fixo.
Se no meio do programa temos que armazenar mais elementos no array, então torna-se impossível e temos a certeza de obter a exceção ‘out_of_bound’, no momento em que tentamos armazenar elementos além dos limites do array.
Uma solução para isso é ter o array declarado com a capacidade máxima para que não encontremos nenhum problema em armazenar mais elementos em tempo de execução. Mas esse arranjo tem uma séria desvantagem, ou seja, estamos desperdiçando muita memória.
=> Verifique a série de treinamento C ++ completa aqui.
A resposta para todas essas questões é usar uma matriz dinâmica que se expandirá por conta própria conforme a necessidade. A STL fornece essa matriz dinâmica na forma de um contêiner vetorial.
O que você aprenderá:
- Como definimos vetores?
- Declarando um vetor em C ++ com std :: Vector Class
- Inicializar vetor
- Vector Iterator
- Funções de vetor
- Capacidade vetorial
- Modificadores de vetor
- Vetor 2D
- Exemplo de vetor
- Conclusão
- Leitura recomendada
Como definimos vetores?
Os vetores são contêineres de matriz dinâmica que redimensionam automaticamente quando os elementos são inseridos ou excluídos. O armazenamento do vetor é feito pelo próprio contêiner do vetor.
Os elementos do vetor são armazenados em locais contíguos. Assim como os arrays, os elementos do vetor também podem ser percorridos e acessados usando iteradores.
Declarando um vetor em C ++ com std :: Vector Class
Na classe de vetor STL ' std :: vector 'É definido no cabeçalho. Assim, para usar um contêiner de vetor, devemos incluir este cabeçalho em nosso programa conforme mostrado abaixo:
#include
Podemos declarar um vetor vazio conforme mostrado abaixo:
std::vector myvec;
A linha de código acima criará um vetor com os elementos do tipo inteiro. Na memória, isso será definido como myvec.
Inicializar vetor
Podemos inicializar um vetor com valor no momento de declará-lo.
download gratuito do modelo de caso de teste do excel
Isto se faz do seguinte modo:
#include int main() { std::vector myvec = {1, 1, 2, 3, 5}; }
No código acima, declaramos um vetor do tipo int denominado myvec contendo os primeiros cinco elementos na sequência de Fibonacci.
O layout da memória deste vetor será o seguinte:
Vector Iterator
Como já mencionado, usamos iteradores para percorrer o vetor sequencialmente.
Os vetores suportam as seguintes funções de iterador para percorrer os elementos:
- começar() - Retorna o iterador apontado para o primeiro elemento do contêiner de vetor.
- fim() - Retorna um iterador apontando para o elemento que segue o último elemento do vetor.
- rbegin () - Retorna um iterador reverso apontando para o último elemento no contêiner de vetor.
- render () - Retorna um iterador reverso apontando para o primeiro elemento do contêiner de vetor.
- cbegin () - Retorna um iterador constante apontando para o primeiro elemento no contêiner de vetor.
- um pouco() - Retorna um iterador constante apontando para o elemento após o último elemento do contêiner de vetor.
- crbegin () - Retorna um iterador constante reverso apontando para o último elemento no contêiner de vetor.
- crend () - Retorna um iterador constante reverso apontando para o primeiro elemento no contêiner de vetor.
Vamos ver um exemplo que demonstraria essas funções de iterador.As outras funções podem ser usadas de forma semelhante.
#include #include using namespace std; int main() { vector v1; for (int i = 1; i <= 5; i++) v1.push_back(i+1); cout << 'Output of Vector with begin and end: '; for (auto i = v1.begin(); i != v1.end(); ++i) cout << *i << ' '; cout << '
Output of Vector with rbegin and rend: '; for (auto itr = v1.rbegin(); itr != v1.rend(); ++itr) cout << *itr << ' '; cout << '
Output Vector of with cbegin and cend: '; for (auto itc = v1.cbegin(); itc != v1.cend(); ++itc) cout << *itc << ' '; cout << '
Output Vector of with crbegin and crend : '; for (auto icr = v1.crbegin(); icr != v1.crend(); ++icr) cout << *icr << ' '; return 0; }
Resultado:
Saída do vetor com início e fim: 2 3 4 5 6
Saída do vetor com rbegin e rend: 6 5 4 3 2
Vetor de saída de com cbegin e cend: 2 3 4 5 6
Vetor de saída de com crbegin e crend: 6 5 4 3 2
Portanto, neste código, declaramos um vetor e inserimos valores nele usando a função push_back. Em seguida, exibimos os vetores usando cada uma das funções de iterador que descrevemos acima. Como você pode ver na saída, dependendo das funções do iterador usadas, a ordem em que o vetor é exibido muda.
Funções de vetor
Classificando um Vetor
Podemos usar algoritmos STL que já vimos no vetor.
A seguir, está o exemplo de como usar ‘Classificar’ no vetor.
#include #include #include using namespace std; int main() { vector myvec = {10,50,30,20,60,40}; cout<<'Original Vector'< Resultado:
Vetor Original
10 50 30 20 60 40
Vetor Ordenado
10 20 30 40 50 60
No exemplo acima, inicializamos um vetor e, em seguida, aplicamos um algoritmo de classificação para classificar o vetor.
Impressão de elementos de um vetor
Os vetores podem ser impressos usando um iterador e um fluxo 'cout'. Podemos usar um iterador para percorrer cada um dos elementos do vetor e imprimi-los com cout.
O exemplo a seguir mostra isso:
#include #include using namespace std; int main() { vector v1; for (int i = 1; i <= 5; i++) v1.push_back(i+2); cout << 'Output of Vector with begin and end: '; for (auto i = v1.begin(); i != v1.end(); ++i) cout << *i << ' '; }
Resultado:
Saída do vetor com início e fim: 3 4 5 6 7
Capacidade vetorial
Existem várias funções que atuam sobre os vetores para determinar seu tamanho, tamanho máximo, etc.
Listamos as funções a seguir:
(i) Tamanho do vetor
A função size () retorna o número de elementos no contêiner de vetor. Esta é a função embutida da classe std :: vector e pode ser usada diretamente para encontrar o tamanho do vetor.
o que é controle de qualidade e garantia de qualidade
Vejamos um exemplo de vetor usando a função size ():
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << 'Vector Size : ' << myvec.size(); return 0; }
Resultado:
Tamanho do vetor: 6
No programa acima, definimos um vetor myvec que consiste em seis elementos. Em seguida, chamamos a função size () em myvec e ela exibe o tamanho correto.
(ii) Redimensionar um vetor
Também podemos redimensionar um vetor para o tamanho desejado de forma que ele possa conter 'n' um número de elementos. Isso é conseguido pela função 'resize ()' da classe std :: vector. A função de redimensionamento usa o tamanho do vetor como parâmetro e, a seguir, redimensiona o contêiner do vetor para o tamanho especificado.
Vamos entender isso com a ajuda de um exemplo.
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << '
Vector elements are: '; for (auto it = myvec.begin(); it != myvec.end(); it++) cout << *it << ' '; myvec.resize(4); cout << '
Vector Size after resize: ' << myvec.size(); cout << '
Vector elements after resizing are: '; for (auto it = myvec.begin(); it != myvec.end(); it++) cout << *it << ' '; return 0; }
Resultado:
Os elementos do vetor são: 1 1 2 3 5 8
Tamanho do vetor após redimensionar: 4
Os elementos do vetor após o redimensionamento são: 1 1 2 3
No programa acima, definimos inicialmente um vetor myvec de tamanho 6. Em seguida, chamamos a função de redimensionamento neste vetor com tamanho = 4. Isso significa que queremos redimensionar nosso vetor para o tamanho 4 agora.
Depois de chamar a função de redimensionamento, imprimimos o vetor novamente. Vemos que quando redimensionamos o vetor para o tamanho 4, os elementos restantes são descartados e apenas os 4 elementos do vetor são exibidos.
Além das funções de tamanho e redimensionamento, a classe vetorial também suporta mais algumas funções que nos permitem manipular a capacidade do vetor. Eles estão:
- tamanho máximo(): Retorna o tamanho máximo, ou seja, o número máximo de elementos que o vetor pode conter.
- capacidade(): Retorna o tamanho do espaço de armazenamento atualmente alocado. Isso é retornado em termos de número de elementos.
- vazio(): Verifica se o recipiente está vazio.
- encolher para caber(): Reduz a capacidade do vetor para caber no tamanho e descarta todos os outros elementos.
- reserva(): Reserva a capacidade do vetor para conter n elementos.
Modificadores de vetor
Modificadores são operações ou funções que podem ser usadas para modificar o conteúdo do contêiner de vetor. Veremos algumas das funções principais que são usadas como modificadores.
Atribuição de novos valores ao vetor
Uma das funções modificadoras fornecidas por std :: vector é a função de atribuição. A função Assign atribui novos valores ao vetor, substituindo os antigos.
Isso é demonstrado no exemplo a seguir.
#include #include using namespace std; int main() { // Assign vector vector myvec; // assign value 10 5 times myvec.assign(5, 10); cout << 'The vector elements: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; }
Resultado:
Os elementos do vetor: 10 10 10 10 10
No código acima, declaramos um vetor do tipo int. Em seguida, chamamos para atribuir uma função com os parâmetros 5, 10. Isso significa que pretendemos atribuir o elemento 10 ao vetor 5 vezes. Quando exibimos o vetor, vemos que o vetor possui 5 elementos, todos com valor 5.
Apagando um vetor
A próxima função fornecida por std :: vector para modificar um vetor é a função ‘apagar’. A função de apagar remove os elementos do intervalo especificado ou uma posição do vetor.
Vejamos um exemplo da função Erase.
#include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5}; cout << '
Vector elements:'; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // remove the first element myvec.erase(myvec.begin()); cout<<'
Vector size after erase: '< Resultado:
Elementos do vetor: 1 1 2 3 5
Tamanho do vetor após apagar: 4
Vetor após operação de apagamento: 1 2 3 5
Conforme mostrado na saída acima para a função de redimensionamento, especificamos o intervalo ou a posição do elemento a ser apagado ou removido. No exemplo acima, especificamos a posição apontando para o primeiro elemento do vetor.
Inserir elementos no vetor
A classe vetorial std :: vector fornece outra função para inserir valores no vetor. A função Insert nos permite inserir elementos no vetor antes da posição especificada.
Isso ficará claro com o seguinte exemplo.
#include #include using namespace std; int main() { // Assign vector vector myvec = {2,3,4}; cout << '
Initial vector: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // inserts 20 at the beginning, 30 after that myvec.insert(myvec.begin(), 20); myvec.insert(myvec.begin()+1,30); cout << '
New vector after insert: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; }
Resultado:
Vetor inicial: 2 3 4
Novo vetor após a inserção: 20 30 2 3 4
O programa acima declara um vetor com 3 elementos inicialmente. Em seguida, chamamos a função de inserção duas vezes para inserir os valores 20 e 30 na primeira e na segunda posição no vetor, respectivamente. Em seguida, exibimos o vetor alterado.
Troca de conteúdo vetorial
A classe vetorial também nos fornece a capacidade de trocar ou trocar o conteúdo de um vetor com o de outro vetor do mesmo tipo e tamanho. Isso é obtido pela função incorporada de vetor ‘swap’.
Considere o seguinte trecho de código.
#include #include using namespace std; int main() { // swap operation vector v1, v2; v1.push_back(1); v1.push_back(3); v2.push_back(5); v2.push_back(7); cout << '
Vector 1: '; for (int i = 0; i < v1.size(); i++) cout << v1(i) << ' '; cout << '
Vector 2: '; for (int i = 0; i < v2.size(); i++) cout << v2(i) << ' '; // Swaps v1 and v2 v1.swap(v2); cout << '
After Swap
Vector 1: '; for (int i = 0; i < v1.size(); i++) cout << v1(i) << ' '; cout << '
Vector 2: '; for (int i = 0; i < v2.size(); i++) cout << v2(i) << ' '; }
Resultado:
Vetor 1: 1 3
Vetor 2: 5 7
Após a troca
Vetor 1: 5 7
Vetor 2: 1 3
O código acima mostra o conteúdo de dois vetores antes e depois da troca.
Limpando valores no vetor
Em contraste com a remoção de um ou mais elementos do vetor usando a função de apagamento, temos outra função ‘Limpar’ que nos permite remover todos os elementos no contêiner do vetor.
No programa abaixo, demonstramos uma função clara do contêiner de vetor.
#include #include using namespace std; int main() { // swap operation vector v1; v1.push_back(1); v1.push_back(3); v1.push_back(5); v1.push_back(7); cout<<'
Size of vector v1: '< Resultado:
Tamanho do vetor v1: 4
Vetor 1: 1 3 5 7
Tamanho do vetor v1 após chamada para limpar a função: 0
Aqui, primeiro declaramos um vetor e, em seguida, colocamos os elementos nele. Assim que chamarmos a função clear (), vemos que todos os elementos do vetor são removidos de uma vez.
na (pos)
Esta função retorna a referência ao elemento na posição 'pos' dentro do vetor.
Esta é uma das funções utilizadas para acessar o elemento vetorial.
Um exemplo é dado abaixo:
#include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Element at position 3 : '< Resultado:
Elemento na posição 3: 3
Conforme mostrado no exemplo, a função 'at' é usada para acessar o elemento no vetor na posição especificada.
Frente
A função ‘front’ retorna a referência ao primeiro elemento do vetor. Esta é outra função que usamos para acessar os elementos do contêiner de vetor.
O exemplo a seguir mostra o uso da função 'frontal'.
#include #include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();it Resultado:
Vetor de entrada: 1 1 2 3 5 8
Elemento na frente do vetor: 1
Voltar
Semelhante à função 'frontal', a função traseira é usada para acessar o último elemento do contêiner de vetor. A função ‘back’ retorna uma referência ao último elemento no contêiner de vetor.
O exemplo a seguir mostra o uso da função ‘back’.
#include #include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();it Resultado:
Vetor de entrada: 1 1 2 3 5 8
Elemento na parte de trás do vetor: 8
Encontre um elemento no vetor
A função ‘encontrar’ é usada para descobrir se um determinado elemento (referido como chave) está presente no vetor ou não. Esta função deve ser rápida e eficiente. Assim que o valor for encontrado, a função retorna.
O exemplo a seguir mostra o uso da função find.
#include #include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();itkey; if(find(myvec.begin(),myvec.end(),key)!= myvec.end()) cout<<'
Element found'; else cout<<'
Element not found'; }
Resultado:
Vetor de entrada: 1 1 2 3 5 8
Digite a chave a ser pesquisada: 0
Elemento não encontrado
Vetor 2D
O vetor bidimensional também é conhecido como ‘Vetor do Vetor”. Assim como as matrizes bidimensionais, os elementos dos vetores bidimensionais também são organizados na forma de matriz.
Um exemplo de programa para vetor 2D é fornecido abaixo.
#include #include // for 2D vector using namespace std; int main() { // Initializing 2D vector 'odd_vect' with vector odd_vect{ { 1, 3, 5 }, { 7, 9, 11 }, { 13,15,17 } }; // Displaying the 2D vector cout<<'2D vector : '; cout< Resultado:
Vetor 2D:
1 3 5
7 9 11
13 15 17
como fazer uma lista duplamente vinculada java
No exemplo acima, observe a maneira como o vetor 2D é definido. É definido como um vetor dentro de outro vetor. Ao exibir este vetor 2D, usamos a mesma abordagem usada para exibir matrizes 2D.
Exemplo de vetor
Abaixo está um exemplo de vetor que contém a maioria das operações de vetor.
#include #include using namespace std; int main() { // Assign vector vector myvec; // assign value 10 5 times myvec.assign(5, 10); cout << 'The vector elements: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // push value 5 in myvec myvec.push_back(5); int n = myvec.size(); cout << '
The new vector after push_back:'; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // pop the element myvec.pop_back(); cout<<'
New vector after pop_back : '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // inserts 20 at the beginning myvec.insert(myvec.begin(), 20); cout << '
New vector after insert: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // remove the first element myvec.erase(myvec.begin()); cout<<'
Vector size after erase: '< Resultado:
Os elementos do vetor: 10 10 10 10 10
O novo vetor após push_back: 10 10 10 10 10 5
Novo vetor após pop_back: 10 10 10 10 10
Novo vetor após inserir: 20 10 10 10 10 10
Tamanho do vetor após apagar: 5
Depois de apagar o primeiro elemento: 10 10 10 10 10
A seguir está a imagem do mesmo.

No exemplo acima, declaramos um vetor e, em seguida, usando as funções de atribuição e push_back, inserimos os elementos no vetor. Em seguida, usamos a função pop_back para remover um elemento do final do vetor. Depois disso, adicionamos novamente um elemento ao vetor usando o elemento insert e, em seguida, apagamos o elemento usando a função erase.
Este é um exemplo de ponta a ponta do contêiner vetorial, demonstrando suas várias funções.
Conclusão
Com isso, chegamos ao final deste tutorial sobre vetor.
Em nosso próximo tutorial, aprenderemos sobre o contêiner de 'lista' de STL, que é semelhante às linhas de matrizes e vetores.
=> Confira o guia de treinamento perfeito C ++ aqui.
Leitura recomendada