Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Percorrer um vector com for_each
  2. Percorrer um vector com iterador
  3. Copiar um vector
  4. Comparar vectors
  5. uso de iterador

Para utilizarmos esse tipo de dado vector, precisamos incluir a biblioteca chamada Vector. É necessário conhecimento de C++ Generics para compreender melhor esta parte do tutorial.

O básico sobre o tipo de dada derivado array/vetor por ser visto C++ Básico: Vetor.

Vector, em C++, é uma estrutura de dados ou coleção que armazena informações de um determinado tipo de dado. Diferente de array/vetor, o tipo de dado Vector é dinâmico permitindo a adição e remoção de elementos.

Algumas características
  1. Genérico
  2. Dinâmico
  3. Homogêneo
  4. Ordenado
  5. Armazena apenas valor
  6. Aceita valores repetidos

Para utilizarmos esse tipo de dado List, precisamos incluir a biblioteca chamada list. É necessário conhecimento de Generics para compreender melhor esta parte do tutorial.

Sintaxe
#include <vector>

A declaração de uma variável do tipo vector é feita utilizando o nome do tipo de dado vector e o tipo de dado que desejamos utilizar entre < e >. Dessa forma, temos uma estrutura de dados genérica.

Sintaxe
vector<tipo_dado> nome_vector; //não iniciado

vector<tipo_dado> nome_vector = { valor1, valor2, valorN}; //iniciado

vector<tipo_dado> nome_vector( qtd, valor); //iniciado com valor repetido

vector<tipo_dado> nome_vector( qtd ); //quantidade de elementos não iniciados reservada
Onde
tipo_dado : Tipo de dado utilizando para armazenar os elementos
qtd: número de elementos
valor1..N: valor dos elementos de acordo com tipo_dado
valor: valor que dos elementos repetidos baseados em qtd

Um vetor com valores iniciados devem ter seus valores, baseados no tipo de dado utilizado, delimitados por { e } , separados por (,) e terminados com (;):

Exemplo 1
#include <iostream>  
#include <vector>
using namespace std; 

int main()  
{  
    vector<float> vec_float;
    vector<int> vec_int = {1,2,3,4,5};
    vector<char> vec_char(3,'A');
} 
Saída
-

O acesso aos valores contidos no tipo de dado vector é feita informando a posição de um elemento como argumento para o operador [], como o que foi visto para arrays.

Para alterar um valor contido em uma posição de um vector, basta usar operador de atribuição (=) e o novo valor desejado.

Sintaxe: atribuição
nome_vetor[indice] = valor;
Sintaxe: recuperação
nome_vetor[indice];
Exemplo 2
#include <iostream>  
#include <vector>
using namespace std; 

int main()  
{  
    vector <int> vec_int = {1,2,3,4,5};
    cout << vec_int[0] << endl; //acesso
    vec_int[0] = 100; //alteração
    cout << vec_int[0] << endl;
}
Saída
1
100

Para adicionarmos e removermos elementos de um vector, utilizamos os métodos push_back e pop_back. O primeiro método adiciona um novo enquanto o segundo remove um elemento. Os novos elementos sempre são removidos ou adicionados no fim.

Sintaxe
public void pop_back();
Sintaxe
public void pop_back(const tipo_dado &val);
Exemplo 3
#include <iostream>  
#include <vector>
using namespace std; 

int main()  
{  
    vector<int> vec = {1,2,3};
    cout<< vec.size() << endl;
    vec.push_back(4);
    cout<< vec.size() << endl;
    vec.pop_back();
    cout<< vec.size() << endl;
}
Saída
3
4
3

Para iterarmos ou percorrermos um vector, podemos utilizar o comando for que foi estudado em C++ Básico: Comandos de repetição.

Exemplo 4
#include<iostream>  
#include<vector>
using namespace std; 

int main()  
{  
    vector<int> vec_int = {1,2,3};
    for(int i=0; i < 3 ; i++)
    {
        cout << vec_int[i] << std::endl;
    }
} 
Saída
1
2
3

O número de elementos contidos em um vector pode ser conhecido fazendo uso de seu método público size como pode ser visto abaixo:

Sintaxe
public size();
Exemplo 5
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> vec = {1,2,3};
    cout<< vec.size();
    return 0;
}
Saída
3

Podemos utilizar o tipo de dado Vector como parâmetro de um método ou função assim como qualquer outro tipo de dados como foi visto em C++ Básico:Funções. No método ou função definimos uma parâmetro do tipo vector.

Sintaxe: declaração
tipo_retorno nome_funcao(vector<tipo_dado> parametro); //protótipo
Sintaxe: argumento
nome_funcao(variavel_vector);
Exemplo 6
#include<iostream>  
#include<vector>
using namespace std; 

//valor
void funcao1(vector<int> v)
{
    cout << v[0] << endl;
}
//referência
void funcao2(vector<int> *v){
    
    cout << (*v).size() << endl;
    cout << (*v)[0] << endl;
}

int main()  
{  
    vector<int> vec_int = {1,2,3};
    funcao1(vec_int);
    funcao2(&vec_int);
} 
Saída
1
1

O retorno de valor do tipo vector é semelhante ao que já foi visto sobre retorno de tipos de dados em funções. Basta utilizar o comando return ao fim, de uma função ou método, informando uma variável do tipo vector que deve ser retornada.

Sintaxe
vector<tipo_retorno> nome_metodo(lista_parametros)
{
    //corpo omitido
    return nome_vector;
}
Exemplo 7
#include<iostream>  
#include<vector>
using namespace std; 

vector<int> funcao1()
{
    //codigo omitido
   vector<int> v = {};
   v.push_back(1);
   v.push_back(2);
   v.push_back(3);
   return v; //retornando vector
}

int main()  
{  
    vector<int> vec_int = funcao1();
    vector<int>::iterator it;
    for (it = vec_int.begin(); it != vec_int.end(); it++){
        cout << *it << std::endl;
    } 
} 
Saída
1
2
3

Para ordenarmos um vector, de forma ascendente, utilizamos a função sort, contida na biblioteca algorithm. Essa função recebe como argumento um iterador para o início e fim do vector.

Sintaxe
sort(RandomAcessIterator first, RandomAccessIterator last);
Onde
first: iterador do início do vector
last: iterador do fim do vector
Exemplo 8
#include<iostream>  
#include<vector>
#include<algorithm> //sort

using namespace std; 

int main()  
{  
    vector<int> vec = {3,5,2,4,1,6};
    sort(vec.begin(), vec.end());
    vector<int>::iterator it;
    for (it = vec.begin(); it != vec.end(); it++){
        cout << *it << " ";
    }
}
Saída
1 2 3 4 5 6
            

A classe vector fornece vários métodos para manipular seus dados além das operações básicas vistas. É necesssário conhecimento de C++: Iteradores e C++: Ponteiros para esta parte do tutorial. Abaixo, os métodos da classe vector bem como seus repectivos exemplos:

O tipo de dado size_type que será visto em alguns exemplos é um tipo de dado númerico que pode ser um tipo unsigned int ou unsigned long;

reference e iterator vistos abaixo representam os tipos de dados usados na criação de um vector para e seus elementos.

Tab. 1: Métodos
Nome do método Descrição
assign -
at Retorna referência de um elemento
back Retorma a referência para o último elemento
begin Retorna um iterador para o primeiro elemento
capacity -
cbegin -
cend -
clear Remove todos os elementos
crbegin -
crend -
data -
emplace -
emplace_back -
empty Verifica se está vazio ou não.
end Retorna um iterador para o fim
erase Remove substring ou caracters
front Retorna a referência para o primeiro elemento
get_allocator -
insert Insere um elemento
max_size -
pop_back Remove um elemento do fim
push_back Adiciona um elemento no fim.
rbegin -
rend -
reserve -
resize Redefine o número de elemtos
shirink_to_fit -
size Retorna número de elementos
swap -

Com o método at podemos recuperar uma referência para um elemento em um determinado índice que é passado como argumento.

Sintaxe
public reference at(size_type n);
const_reference at (size_type n) const;
Onde
n: índice/posição do elemento para retornar a sua referência.
Retorno
Referência para o elemento na posição n.
Exemplo
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec = {0,1,2,3};
    int &ref = vec.at(3);
    cout << ref;
}
Saída
3

Com o método begin podemos recuperar um iterador que aponta para o primeiro elemento de um vector.

Sintaxe
public iterator begin() noexcept;
const_iterator begin() const noexcept;
Onde
-
Retorno
Iterador apontando para o primeiro elemento do vector
Exemplo
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec = {-99,1,2,3};
    vector<int>::iterator it = vec.begin();
    cout << *it;
}
Saída
-99

Para remoção de todos os elementos de um vector, utilizamos o método clear. Esse método não possui argumentos e retorno.

Sintaxe
public void clear() noexcept;
Onde
-
Retorno
-
Exemplo
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec = {0,1,2,3};
    cout<< boolalpha << vec.empty() << endl;
    vec.clear();
    cout<< boolalpha << vec.empty() << endl;
}
Saída
false
true

Para verificar se um vector está vazio ou não, utilizamos o método empty. Esse método não possui argumento e retorna um booleano como resultado da verificação.

Sintaxe
public bool empty() const noexcept;
Onde
-
Retorno
Booleano contendo true se vector está vazia e false caso contrário.
Exemplo
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec = {0,1,2,3};
    cout<< boolalpha << vec.empty() << endl;
}
Saída
false

Com o método end, podemos recuperar um iterador que aponta para o fim de um vector. Esse método não aceita argumentos.

Sintaxe
public iterator end() noexcept;
const_iterator end() const noexcept;
Onde
-
Retorno
Iterador apontando para o fim do vector
Exemplo
#include 
#include 

using namespace std;

int main()
{
    vector<int> vec = {0,1,2,3};
    vector<int>::iterator it = vec.end();
    cout << *--it;
}
Saída
3

Para remover um intervalo de elementos ou range, podemos utilizar o método erase, que recebe uma posição e uma quantidade de caracteres para remoção.

Sintaxe
public iterator erase(const_iterator position); //exclusão até o fim

public iterator erase(const_iterator first, const_iterator last); //exclusão de intervalo
Onde
position:Iterador para a posição de remoção de elemento
first: Iterador para posição inicial.
last: Iterador para posição final.
Retorno
Iterador apontando para o elemento seguinte aos elementos removidos.
Exemplo
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<nt> vec = {0,1,2,3};
    cout<< vec.size() << endl;
    vec.erase(vec.begin());
    cout<< vec.size() << endl;
    for(int i = 0; i < vec.size() ; i++)
     cout<< vec[i] << " ";
    return 0;
}
Saída
4
3
1 2 3

O método insert é utilizado para inserir um elemento em um vector uma posição anterior à posição passada como argumento para o método.

Sintaxe
public iterator insert(const_iterator position, const tipo_dado &val);

iterator insert (const_iterator position, size_type n, const value_type& val);
template <class inputiterator> iterator insert (const_iterator position, InputIterator first, InputIterator last);
iterator insert (const_iterator position, value_type&& val);
iterator insert (const_iterator position, initializer_list<value_type> il);
Onde
position: iterador para a posição desejada.
val: valor ou elemento que será inserido em position.
Retorno
Iterador que aponta para o novo elemento inserido.
Exemplo
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec = {1,2,3};
    cout<< vec.size() << endl;

    vec.insert(vec.begin(),0);
    cout<< vec.size() << endl;
    for(int i = 0; i < vec.size() ; i++)
     cout<< vec[i] << " ";
    return 0;
}
Saída
3
4
0 1 2 3

O métodos pop_back é utilizados para remover/excluir o elemento do fim de um vector. Esse método não recebe argumentos e não retorna valor.

Sintaxe
public void pop_back();
Onde
-
Retorno
-
Exemplo
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec = {0,1,2,3};
    cout<< vec.size() << endl;
    vec.pop_back();
    vec.pop_back();
    cout<< vec.size() << endl;
    for(int i = 0; i < 2 ; i++)
     cout<< vec[i] << " ";
    return 0;}
Saída
4
2
0 1

O métodos push_back é utilizados para adicionar um elemento, que é passado como argumento, no fim de um vector. Esse método não retorna valor e não recebe argumentos.

Sintaxe
public void push_back(const tipo_dado &val);
void push_back (value_type&& val);
Onde
&val: valor ou elementos para adicionar.
Retorno
-
Exemplo
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec = {1,2,3};
    cout<< vec.size() << endl;
    vec.push_back(4);
    cout<< vec.size() << endl;
    for(int i = 0; i < 4 ; i++)
     cout<< vec[i] << " ";
    return 0;
}
Saída
3
4
1 2 3 4

Com o método resize podemos redimensionar um vector para conter um determinado número de elementos superior ou inferior ao atual.

Sintaxe
public void resize(size_type n);
void resize (size_type n, const value_type& val);
Onde
n: número de elementos para redimensionar.
Retorno
-
Exemplo
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec = {1,2,3,4,5};
    cout<< vec.size() << endl;
    vec.resize(3);
    cout<< vec.size() << endl;
    
    return 0;
}
Saída
5
3

O método size é utilizado quando precisamos descobrir o número de elementos de um vector. Esse método não recebe argumentos e retorna um inteiro.

Sintaxe
public size_type size() const;
Onde
-
Retorno
Inteiro não sinalizado contendo o número de elementos
Exemplo
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec = {1,2,3};
    cout<< vec.size();
    return 0;
}
Saída
3
  1. 01/08/2025 - revisão 4 - Correções: pontuais, sintaxes e 'Objetivos', targets e links Tab.1 movidos p/ coluna Nome
  2. 27/09/2024 - revisão 3 - Adição: 'adicionar/remover'; Correção: Intro; Quebra de objetivos em colunas; Outros ajustes
  3. 30/08/2024 - revisão 2 - Correção em links de objetivos
  4. 12/02/2024 - revisão 1 - correção em navegação, css, numeração de exemplos, tabela de métodos e erros gramaticais
  5. 30/06/2023 - versão inicial