Escolar Documentos
Profissional Documentos
Cultura Documentos
Ponteiros
Strings
Listas
PONTEIROS
Introduo
system("Pause");
return 0; O operador de de-referncia * mostra
} que o valor contido naquele
endereo que deve ser mostrado aqui.
O output
O endereo pode mudar de execuo para execuo e de mquina para
mquina. Quem decide isso o SO.
Operadores & e *
#include <iostream> Mas onde armazenar o
endereo de uma
using namespace std; varivel?
int main()
{
int k = 42;
system("Pause");
return 0;
}
Ponteiros
system("Pause");
return 0;
}
Ponteiros
#include <iostream>
system("Pause");
return 0; E *(&k) equivalente
} a *ptr.
O output
Perceba que, nesse segundo momento, o endereo de k mudou
Ponteiros e arrays
#include <iostream>
O que ser que acontece
using namespace std; quando imprimimos na tela o
valor da prpria array?
int main()
{
int lost[3] = {4, 8, 15};
system("Pause");
return 0; E o endereo dos
} seus elementos?
Ponteiros e arrays
strings
using namespace std;
int main()
[1] Incluso da biblioteca para {
uso do tipo string na rotina //Necessrio para adaptar as caractersticas de uma determinado idioma ou de uma
regio.
principal; setlocale(LC_ALL, "Portuguese");
[5] Comparando o valor das //[5] - Comparando strings com operadores convencionais
if(nome != ""){
string, isto , o contedo //[6] - Uso de outputs da forma convencional
comparado; endl;
cout << "Seu nome " << nome << " e seu poder mais de 8000!!!" <<
[7] Mtodo length() retorna a cout << "\"" << nome << "\" tem " << tamanho
<< " caracteres. (Espaos em branco tambm contam como caractere)" << endl;
quantidade de caracteres da return 0;
string
Tela de execuo
Tela de Execuo
Principais Funes
Iterador
A Standard Template Library (STL)
do C++ possui containers que
so geralmente acessados por
iteradores. Todo objeto iterador
representa uma posio no
container.
A vantagem no uso de iteradores
que ele permite que todos os
containers usem a mesma
interface para acessar elementos.
Os iteradores possuem operaes
fundamentais que definem o seu
comportamento bsico.
#include <iostream>
#include <string>
int main ()
{
setlocale (LC_ALL, "Portuguese");
//pede uma string para o usurio e imprime caractere por caractere
string str = "";
cout<<"Insira uma palavra: "<<endl;
String suportam o operador [], cin>>str;
mas outros containers no; cout<<"A string caractere por caractere : \n";
Por isso usamos iteradores, que for ( string::iterator it=str.begin(); it!=str.end(); ++it)
so suportados pela maioria de cout << *it<<'\n';
containers em C++;
cout<<"Ou entao : \n";
for (int idx = 0; idx < str.size(); ++idx)
cout << str[idx] << '\n';
return 0;
}
LISTAS
A Biblioteca STL
A STL (Standard Template Library) representa uma poderosa
coleo de modelos de programao. Ela prov um grupo de
containers, algoritmos, iteradores, e outras coisas.
Containers permitem voc armazenar e acessar uma
coleo de valores do mesmo tipo. verdade que arrays
permitem que voc utilize essa mesma caracterstica.
Porm,. os containers da STL oferecem maior poder e
flexibilidade do que um array
Iteradores so ponteiros que identificam elementos em
containers, eles podem ser manipulados para se mover entre
os elementos.
Eles so bastante utilizados para iterar atravs de
contineres. Alm disso, os algoritmos da STL exigem
iteradores.
Introduo
As listas so containers de sequncia que permitem operaes de insero
e remoo em qualquer lugar dentro da sequncia e iterao em
ambas as direes;
Em comparao com outros containers de sequncia padro (matriz, vetor e
deque), as listas, geralmente, funcionam melhor na insero, extrao
e movimentao de elemento;
A principal desvantagem das listas que elas no tm acesso direto aos
elementos por sua posio;
Por exemplo, para acessar o sexto elemento de uma lista, preciso iterar a partir de uma
posio conhecida (como o comeo ou o fim) para essa posio, que leva um tempo linear
na distncia entre eles.
Eles tambm consomem alguma memria extra para manter as informaes de vinculao
associadas a cada elemento (o que pode ser um fator importante para grandes listas de
elementos de pequeno porte).
Alguns Conceitos
using namespace std;
int main()
{
list<char> alfabeto; //Coleo de chars
// Inserindo elementos com valor de 'a' at 'z';
for(char letra='a'; letra !='z'; ++letra)
{
alfabeto.push_back(letra);
}
}
O Output do programa
Como esperado, o iterador passa por todos os elementos da lista;
Exerccio 1
Faa um programa que receba uma array do usurio e calcule a mdia dos elementos informados,
usando ponteiros.
Exerccio 2
Faa um programa que pea ao usurio para digitar uma palavra e imprima caractere por caractere
dela (no necessrio fazer o tratamento de caracteres especiais).
Exerccio 3
Faa um programa que pea ao usurio uma palavra e a imprima em ordem inversa.
Exerccio 4
Faa um programa que pea ao usurio uma frase e verifique o nmero de vezes que certa palavra
ocorre nesta frase.
Exerccio 5
Crie um programa que receba nmeros inteiros do usurio at que o nmero 0 seja inserido. Em
seguida, o programa deve imprimir na tela todos os nmeros inseridos em ordem crescente.
Exerccio 6
Desenvolva um programa que solicite strings do usurio at que o usurio pressione ENTER sem
inserir nenhuma string. O programa deve, ento, apresentar a string de maior comprimento
informada.
Exerccio 7
Faa um programa que solicite 10 nmeros inteiros do usurio, e os armazene em uma lista. O
programa deve, ento, remover o terceiro elemento da lista.
Exerccio 2
Faa um programa que pea ao usurio para digitar uma palavra e imprima caractere por caractere
dela (no necessrio fazer o tratamento de caracteres especiais).
Exerccio 3
Faa um programa que pea ao usurio uma palavra e a imprima em ordem inversa.
Exerccio 4
Faa um programa que pea ao usurio uma frase e verifique o nmero de vezes que certa palavra
ocorre nesta frase.
int main()
{
const int tam = 5;
double arr[tam], soma = 0, med = 0;
system("Pause");
return 0;
}
Gabarito Exerccio 2
Faa um programa que pea ao usurio para digitar uma palavra e imprima caractere por caractere
dela (no necessrio fazer o tratamento de caracteres especiais).
#include <iostream>
#include <string>
int main ()
{
setlocale (LC_ALL, "Portuguese");
//pede uma string para o usurio e imprime caractere por caractere da string
string str = "";
cout<<"Insira uma palavra: "<<endl;
cin>>str;
cout<<"A string caractere por caractere : \n";
for ( string::iterator it=str.begin(); it!=str.end(); ++it)
cout << *it<<'\n';
return 0;
}
Gabarito Exerccio 3
Faa um programa que pea ao usurio uma palavra e a imprima em ordem inversa.
#include <iostream>
#include <string>
int main ()
{
setlocale (LC_ALL, "Portuguese");
//pede uma string para o usurio e imprime ela invertida
string str = "";
cout<<"Insira uma palavra: \n";
cin>>str;
cout<<"A string invertida : \n";
//Bloco de instruo para imprimir os caracteres da string em ordem inversa
for ( string::reverse_iterator rit=str.rbegin(); rit != str.rend(); ++rit){
cout << *rit;
}
cout<<endl;
system("pause");
return 0;
}
Gabarito Exerccio 4
Faa um programa que pea ao usurio uma frase e verifique o nmero de vezes que certa palavra
ocorre nesta frase.
#include <iostream>
#include <string>
#include <locale>
int main ()
{
setlocale (LC_ALL, "Portuguese");
//verifica quantas veze a palavra oi apareceu na frase digitada pelo usurio
string str = "";
string to_find ="br";
int count_founds(0);
cout<<"Insira uma frase para verificar a ocorrncia da palavra: "<<to_find<<endl;
//Funo getline para pegar toda a stream digitada (mesmo que tenha caracteres de trmino , como o espao em branco)
getline(cin,str);
system("pause");
return 0;
}
Gabarito Exerccio 5
Crie um programa que receba nmeros inteiros do usurio at que o nmero 0 seja inserido. Em
seguida, o programa deve imprimir na tela todos os nmeros inseridos em ordem crescente.
#include <iostream>
#include <list>
#include <clocale>
int main(){
setlocale(LC_ALL,"Portuguese");
list<int> numeros;
int num;
numeros.sort();
return 0;
}
Gabarito Exerccio 6
Desenvolva um programa que solicite strings do usurio at que o usurio pressione ENTER sem
inserir nenhuma string. O programa deve, ento, apresentar a string de maior comprimento
informada.
#include <iostream>
#include <clocale>
#include <string>
#include <list>
int main(){
size_t tamanho_max(0);
list<string> strings_inseridas;
string inserida, maior;
do{
cout << "Insira uma frase: " << endl;
getline(cin,inserida);
strings_inseridas.push_back(inserida);
}while(strings_inseridas.back() != "");
list<string>::iterator it;
for(it = strings_inseridas.begin(); it != strings_inseridas.end(); it++){
if((*it).size() > tamanho_max){
tamanho_max = it->size();
maior = *it;
}
}
cout << "A maior frase inserida foi: " << maior << endl;
return 0;
}
Gabarito Exerccio 7
Faa um programa que solicite 10 nmeros inteiros do usurio, e os armazene em uma lista. O
programa deve, ento, remover o terceiro elemento da lista.
#include <iostream>
#include <list> for(it; it != it2; ++it){
#include <iterator> if(it == it3) numeros.erase(it);
}
using namespace std; cout << "Os numeros apos remocao sao: " << endl;
for(it = numeros.begin(); it != numeros.end(); ++it){
int main(){ cout << *it << endl;
}
list<int> numeros; return 0;
int num; }