cpp::daily Vectores bidimensionais

Episódio 5 - Vector de vectores .


cpp::daily Vectores bidimensionais

Sabemos que existe arrays bidimensionais, mas também existe os vectores bidimensionais e é sobre ele que iremos falar sobre esse cpp::daily de hoje.

Vector de vectores é um vetor bidimensional com um número variável de linhas, onde cada linha é um vetor. Cada índice de vetor armazena um vetor que pode ser percorrido e acessado usando iteradores. É semelhante a uma matriz de vetores, mas com propriedades dinâmicas.

Futuramente iremos ter conteúdo sobre bibliotecas que fazem uso de conceitos avançados de Matrizes e Determinantes da Matemática que geralmente são muito utilizadas para mapear imagens, então vamos ver como que escrevemos um vector bidimensional agora.

Quando você deseja criar um array multidimensional você usa assim, por exemplo:

int array[3][5] = {  { 11, 2, 9, 27, 89 },
                     { 20, 13, 52 },
                     { 8, 4, 79, 4 }
                  };

Logo, se você quiser imprimir o número 52, seria: std::cout << array[1][2] .

Os vectores bidimensionais funciona quase da mesma forma só que o desempenho é superior. O mesmo código acima usando vectores, seria:

#include <vector>

std::vector<std::vector<int>> vec {  { 11, 2, 9, 27, 89 },
                                      { 20, 13, 52 },
                                      { 8, 4, 79, 4 }
                                  };

Isso é um vector bidimensional, então se você quiser imprimir também o número 52, seria:

std::cout << vec[1][2] << '\n';

Se você quiser imprimir todos os valores desse vector pode criar um loop aninhado, exemplo:

for ( int i = 0; i < vec.size(); ++i ) {
 for (int j = 0;  j < vec[i].size(); ++j) {
   std::cout << vec[i][j] << ' ';
 }
 std::cout << '\n';
}

A saída será:

11 2 9 27 89 
20 13 52 
8 4 79 4 

Exibindo cada posição dos elementos:

  for ( int i = 0; i < vec.size(); ++i ) {
    for (int j = 0;  j < vec[i].size(); ++j) {
      std::cout << "vec[" << i << "][" << j << "]: " << vec[i][j];
      if( j != 3 ){
        std::cout << ", ";
      }
    }
    std::cout << '\n';
  }

E se você quiser adicionar mais uma coordenada para esse vector? Basta usar o push_back(), exemplo:

Antes da impressão dos elementos pelo loop for.

vec.push_back( { 22, 33, 44 } );

E se quiser remover a última adicionada ou não, basta usar o pop_back():

vec.pop_back();

Código final:

#include <iostream>
#include <vector>

int main( int argc, char ** argv ){
  std::vector<std::vector<int>> vec{  { 11, 2, 9, 27, 89 },
                                      { 20, 13, 52 },
                                      { 8, 4, 79, 4 }
                                   };

  vec.push_back( { 22, 33, 44 } );
  vec.pop_back();

  for ( int i = 0; i < vec.size(); ++i ) {
    for (int j = 0;  j < vec[i].size(); ++j) {
      std::cout << "vec[" << i << "][" << j << "]: " << vec[i][j];
      if( j != 3 ){
        std::cout << ", ";
      }
    }
    std::cout << '\n';
  }

  return 0;
}

Simple, né?!

Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !

Acompanhe o cpp::daily

Deseja aprender C++ e criar seus programas Gráficos e para Terminal com portabilidade para Linux e Windows?

Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:

Acesse o endereço:

https://terminalroot.com.br/cpp/ e saiba mais!


cppdaily


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!