-
Notifications
You must be signed in to change notification settings - Fork 79
Stl
Esta prática consiste primariamente em aprender a usar tipos de dados complexos disponibilizados pela STL e pela biblioteca padrão de C++
Uma das grandes dificuldades de desenvolver em C++ é evitar vazamentos de memória (memory leaks). Durante o desenvolvimento do programa é muito usado o recurso de alocação dinâmica de memória, contudo da mesma forma que o programador tem a responsabilidade de alocar a memória, ele tem de desalocar a memória. Os smart pointers são uma estratégia de evitar que você esqueça de desalocar e crie um programa devorador de memória. Os smart pointers percebem que uma memória alocada não é mais acessível e desaloca a memória.
unique_ptr: um smart pointer para um único objeto com um dono só. Ou seja, este smart pointer aponta para um objeto que deve ter só um apontamento de cada vez. Ao realizarmos atribuições a variável "dono" do objeto muda.
shared_ptr: Um smart pointer para um único objeto e pode ter vários donos. Ou seja, este smart pointer aponta para um objeto que pode ter vários apontamentos de cada vez. Ao realizarmos atribuições adicionamos uma nova referência a este dado. Quando não existem mais referências o dado é automaticamente liberado usando delete
Corrija o uso de memória absurdo do programa abaixo (arquivo tarefa1.cpp) usando smart pointers.
#include <iostream>
int main() {
int *ptr = new int(0);
for(int f=0;f<1024*1024*1024;f++) {
ptr = new int(f);
}
std::cout << "valor final = " << *ptr << std::endl;
delete ptr;
}Corrija o uso de memória absurdo do programa abaixo (arquivo tarefa2.cpp) usando smart pointers.
#include <iostream>
int foo(int x) {
int *vec1 = new int[8];
for(int f=0;f<8;f++) vec1[f]=f*x;
int *vec2 = vec1;
int tmp = vec1[0]+vec1[4]+vec1[7]-vec1[5];
return tmp;
}
int main() {
long int tmp = 0;
for(int f=0;f<1024*1024*512;f++) tmp += foo(f);
std::cout << tmp << std::endl;
}Neste exercício iremos trabalhar com strings. Faça um programa que lê uma linha de texto (usando std::getline) e procure nela todas as ocorrências da palavra "hello". Você deverá implementar uma função
std::vector<int> find_all(std::string text, std::string term);
que devolve um vetor com a posição de todas as ocorrências de term em text. Sua função main deverá mostrar os resultados da busca de maneira bem formatada.
Para isto será necessário olhar as seguintes documentações:
Faça as seguintes modificações no seu exercício final:
- troque todas alocações para usar smart pointers
- utilize
std::vectorpara guardar os dados gerados emgera_entrada. - faça com que a função
gera_entradagere os dados segundo uma normal com média 5 e variância 0.5 - modifique
Experimento::runpara rodar a funçãoExperimento::experiment_code10 vezes. Esta função deverá retornar umstd::paircom a média e o desvio padrão dos tempos de execução. - crie um
std::vectorpara guardar os resultados dos experimentos (devolvidos pela função acima). - reorganize sua função
mainpara usar estes novos recursos implementados em cima da STL.