[R-br] Duvida rcpp, como remover um elemento de um vetor no código C++

Benilton Carvalho beniltoncarvalho em gmail.com
Sábado Outubro 19 02:35:07 BRT 2013


vetor.erase(n)?
On Oct 17, 2013 4:39 PM, "Augusto Ribas" <ribas.aca em gmail.com> wrote:

> Ola pessoal.
>
> Eu estou com uma dificuldade em como fazer uma chamada recursiva usando o
> Rcpp.
>
> Por curiosidade, eu estava fazendo alguns códigos aqui usando o Rcpp, só
> por experiencia.
> Ai eu estava implementando o código para o insertion sort  (
> http://pt.wikipedia.org/wiki/Insertion_sort)
>
> Minha duvida é a seguinte:
>
> #Suponha que eu tenho um vetor qualquer:
>
> vetor<-sample(100)
> vetor
>
> #Iterativamente, eu fiz um código para usar com o Rcpp assim:
>
> library(Rcpp)
>
> cppFunction("
>     NumericVector insertionsortC(NumericVector vetor) {
>         int n = vetor.size();
>
>         double aux;
>         int i , j;
>
>         for(i=1;i<n;i++) {
>             aux=vetor[i];
>             j=i-1;
>             while(j>=0 && vetor[j]>aux) {
>                 vetor[j+1]=vetor[j];
>                 j=j-1;
>                 }
>             vetor[j+1]=aux;
>             }
>         return vetor;
>         }
> ")
>
>
> #Funcionou beleza. Ai eu fui tentar repetir a tentativa, recursivamente
>
> cppFunction("
>     NumericVector insertionsortRC(NumericVector vetor, int n) {
>
>         double aux;
>         int i;
>
>         if(n>1) {
>             insertionsortRC(vetor,n-1);
>             aux=vetor[n-1];
>             i=n-1;
>             while(vetor[i-1]>aux && i>=0 ) {
>                 vetor[i]=vetor[i-1];
>                 i--;
>                 }
>             vetor[i]=aux;
>             }
>
>         return vetor;
>         }
>     ")
>
> #E assim funcionou blz, mas eu tive que começar a mandar o argumento n,
> #que é o tamanho do vetor
>
> #o que eu queria é fazer algo aqui, na chamada recursiva
>
> #insertionsortRC(vetor,n-1);
>
> #sei la, se eu conseguir tirar o ultimo elemento, eu posso suprimir esse
> n-1
> #Eu não entendo de Rcpp e C++ muito bem.
> #Mas tem uma forma simples de mudar o tamanho do vetor, ou arrancar o
> ultimo elemento dele
> #algo tipo vetor.pop()
>
> #pra fazer a chamada ficar tipo
> #vetor.pop();
> #insertionsortRC(vetor);
> #que ai no inicio da chamada eu uso o int n = vetor.size(); igual ao
> formato iterativo.
> #Bem, espero não estar sendo muito confuso na pergunta e que a função
> funcione.
> #Mas imagino que deve ser super simples isso.
>
> Agradeço a atenção desde ja :)
>
> --
> Grato
> Augusto C. A. Ribas
>
> Site Pessoal: http://recologia.com.br/ <http://augustoribas.heliohost.org>
> Github: https://github.com/Squiercg
> Lattes: http://lattes.cnpq.br/7355685961127056
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20131019/34a8b6b7/attachment.html>


Mais detalhes sobre a lista de discussão R-br