Recapitulando
Em linguagem C vimos que existem os Arrays que são estruturas para o armazenamento de dados temporário, de forma semelhante às variáveis, com a diferença de serem múltiplos dados ao invés de uma única informação.
Também vimos que eles pode ser unidimensionais quando são representados por uma única linha com com várias colunas de dados ou multidimensionais quando apresentam múltiplas linhas com várias colunas de dados.
Também vimos que esses dados precisam ser do mesmo tipo e que o C++ possui a classe string que permite manipular cadeia de caracteres sem obrigatoriamente trabalhar com eles como array unidimensionais. Relembrou?
Arrays de Strings
Praticamente quase tudo que vimos de matrizes em C continuam valendo no C++, mas como string como classe é uma novidade do C++, vejamos como são os arrays de strings:
- #include <iostream>
- #include <string>
- using namespace std;
- int main()
- {
- string times[3] = {"Palmeiras", "São Paulo", "Santos"};
- cout<<"tamanho do array: "<<sizeof(times)/sizeof(times[0]);
- for(int i = 0; i<sizeof(times)/sizeof(times[0]); i++)
- {
- cout << "\n"<< times[i] ;
- }
- return 0;
- }
Nesse exemplo podemos relembrar como obtemos a saída dos dados da matriz em tela utilizando um laço for() que pega cada um dos elementos do array através do contador i. Esse contador inicia do 0 com times[0], vai incrementando de um em um com i++, até que seja menor que o tamanho do array.
Lembrando que sizeof(times)/sizeof(times[0] é um artifício que pega o tamanho em bytes do array e divide pelo tamanho de um de seus elementos para fornecer o número 3 que é o tamanho ou número de elementos do array times.
Omitindo e declarando o tamanho do array
Ao iniciar o array podemos usar tanto a declaração:
string times[3] = {"Palmeiras", "São Paulo", "Santos"};
.. como também:
string times[] = {"Palmeiras", "São Paulo", "Santos"};
O funcionamento do nosso programa seria o mesmo. Tanto no primeiro exemplo como no segundo, o tamanho do array permanece três, porém declarar o tamanho é considerado uma boa prática de programação e permite que o array seja preenchido posteriormente. Exemplo:
- #include <iostream>
- #include <string>
- using namespace std;
- int main()
- {
- string times[3] ;
- times[0]="Palmeiras";
- times[1]="São Paulo";
- times[2]="Santos";
- cout<<"tamanho do array: "<<sizeof(times)/sizeof(times[0]);
- for(int i = 0; i<sizeof(times)/sizeof(times[0]); i++)
- {
- cout << "\n"<< times[i] ;
- }
- return 0;
- }
Entendendo os vetores do C++
Uma confusão que surge nos alunos que aprendem lógica de programação com Portugol é que lá o termo vetor é usado para arrays ou matrizes unidimensionais. No entanto em C++ esse termo vetor é usado para denominar uma classe especial de arrays.
Quando digo especial é que os arrays que vimos até aqui são matrizes de tamanho fixo, isto é, seu tamanho não pode ser modificado. No entanto a classe vector do C++ permite criar um objeto matriz de tamanho redimensionável. Exemplo:
- #include <iostream>
- #include <vector>
- using namespace std;
- int main()
- {
- vector<string> times = {"Palmeiras", "São Paulo", "Santos"};
- times.push_back("Flamengo");
- for(string time:times)
- {
- cout<< time << "\n";
- }
- return 0;
- }
Nesse exemplo, na linha 7 estamos criando o vetor times do tipo string com três elementos iniciais. Na linha seguindo utilizamos o método push_back() com o objeto times para adicionar mais um time na lista.
Para sair com o dados em tela estamos usando na linha 9 um for(), só que desta vez um pouco diferente do que estamos acostumados, pois não temos a presença do contador tradicional. Ao invés disso criamos um objeto string chamado time que pega cada um dos elementos do vetor times.
Removendo elementos do vetor em C++
- #include <iostream>
- #include <vector>
- using namespace std;
- int main()
- {
- vector<string> times = {"Palmeiras", "São Paulo", "Santos"};
- times.push_back("Flamengo");
- times.pop_back();
- for(string time:times)
- {
- cout<< time << "\n";
- }
- return 0;
- }
Você pode utilizar o método pop_back() para apagar o último elemento do vetor. No nosso exemplo o "Flamengo" inserido da linha 8 é removido na linha 9, por isso não parece na lista de times.
Concluímos então que vetor em C++ tem um significado bem diferente do que vimos em Portugol e por essa razão, esse termo não deve ser utilizado como sinônimo de matriz unidimensional.
Lembrando que o C++ também possui arrays multidimensionais que trabalham de forma semelhante ao que vimos em C, por isso não vou repetir aqui. Porém uma grande limitação dos arrays é que eles armazenam um único tipo de dados, mas na próxima aula veremos uma alternativa para fugir dessa limitação.
Referências
DEITEL, H. M. DEITEL, P. J. C++: Como programar. Pearson Education do Brasil. 2006.
GBDONLINE. Learn C++ Programming. Disponível em: <https://learn.onlinegdb.com/c%2B%2B_for_beginners> Acesso em 05 ago. 2024.
W3SCHOOLS. C++ Tutorial. Disponível em: <https://www.w3schools.com/cpp/default.asp> Acesso em 05 ago. 2024.