<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=iso-8859-1" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.23532">
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT color=#0000ff size=4 face=Arial><STRONG>Windows 
XP</STRONG></FONT></DIV>
<BLOCKQUOTE 
style="BORDER-LEFT: #000000 2px solid; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; MARGIN-LEFT: 5px; MARGIN-RIGHT: 0px">
  <DIV dir=ltr>
  <DIV>
  <DIV>@<SPAN 
  style="FONT-FAMILY: arial,sans-serif; WHITE-SPACE: nowrap; FONT-SIZE: 13px; FONT-WEIGHT: bold">Mauro 
  Sznelwar</SPAN></DIV></DIV>
  <DIV>Qual sistema operacional você esta usando?</DIV>
  <DIV>Parece que o erro tem haver de estar faltando alguma coisa, o compilador 
  de c++?</DIV>
  <DIV>Eu uso o ubunto aqui, e ja veio junto o compilador, o compilador está 
  instalado ae certinho?</DIV>
  <DIV>Na verdade eu não entendo muito bem de rcpp, estou apenas testando, mas 
  talvez seja algo nesse sentido o erro ae. Aqui funciona normal o codigo.</DIV>
  <DIV><BR></DIV>
  <DIV><BR></DIV>
  <DIV>E o vetor.erase(n) não funcionou :(</DIV>
  <DIV><BR></DIV>
  <DIV>Quando eu tentei assim, deu uma msg de erro:<BR></DIV>
  <DIV><BR></DIV>
  <DIV>library(Rcpp)<BR></DIV>
  <DIV>vetor<-sample(100)<BR></DIV>
  <DIV><BR></DIV>
  <DIV>> cppFunction("</DIV>
  <DIV>+     NumericVector insertionsortRC(NumericVector vetor) 
{</DIV>
  <DIV>+         int n = vetor.size();</DIV>
  <DIV>+         double aux;</DIV>
  <DIV>+         int i;</DIV>
  <DIV>+         if(n>1) {</DIV>
  <DIV>+             vetor.erase(n);</DIV>
  <DIV>+             insertionsortRC(vetor);</DIV>
  <DIV>+             aux=vetor[n-1];</DIV>
  <DIV>+             i=n-1;</DIV>
  <DIV>+             while(vetor[i-1]>aux 
  && i>=0 ) {</DIV>
  <DIV>+                 
  vetor[i]=vetor[i-1];</DIV>
  <DIV>+                 i--;</DIV>
  <DIV>+                 }</DIV>
  <DIV>+             vetor[i]=aux;</DIV>
  <DIV>+             }</DIV>
  <DIV>+         return vetor;</DIV>
  <DIV>+         }</DIV>
  <DIV>+     ")</DIV>
  <DIV>> insertionsortRC(vetor)</DIV>
  <DIV>*** Error in `/usr/lib/R/bin/exec/R': malloc(): memory corruption: 
  0x098db548 ***</DIV>
  <DIV><BR></DIV>
  <DIV>Ai eu pensei se tinha algo haver com o indice, ai tentei com n-1, assim 
  no vetor.erase(n-1)</DIV>
  <DIV><BR></DIV>
  <DIV>
  <DIV>> vetor</DIV>
  <DIV>  [1]  33  31  86  25  70  40  88 
   81  13  85  87  39  60  64  10 
   82  89  14  66  36  15  96  26</DIV>
  <DIV> [24]   4  54  29  83  55  68  91 
    6 100  51   7  53  99  65  23  94 
   57  90  32  47  16  50  28</DIV>
  <DIV> [47]   3  98  11  18  76  63  77 
   74  49   8  97  12  27  35  79 
   80  20  67  93   5  56   9  37</DIV>
  <DIV> [70]  24  92  69  38  44  17  46 
   43  34  19   2  95  72   1  61 
   41  62  22  42  21  84  48  78</DIV>
  <DIV> [93]  73  30  59  58  52  75  71 
   45</DIV>
  <DIV><BR></DIV>
  <DIV>> insertionsortRC(vetor)</DIV>
  <DIV> [1] 3.607393e-313  3.300000e+01  3.100000e+01 
   8.600000e+01  2.500000e+01  7.000000e+01</DIV>
  <DIV> [7]  4.000000e+01  8.800000e+01  8.100000e+01 
   1.300000e+01  8.500000e+01  8.700000e+01</DIV>
  <DIV>[13]  3.900000e+01  6.000000e+01  6.400000e+01 
   1.000000e+01  8.200000e+01  8.900000e+01</DIV>
  <DIV>[19]  1.400000e+01  6.600000e+01  3.600000e+01 
   1.500000e+01  9.600000e+01  2.600000e+01</DIV>
  <DIV>[25]  4.000000e+00  5.400000e+01  2.900000e+01 
   8.300000e+01  5.500000e+01  6.800000e+01</DIV>
  <DIV>[31]  9.100000e+01  6.000000e+00  1.000000e+02 
   5.100000e+01  7.000000e+00  5.300000e+01</DIV>
  <DIV>[37]  9.900000e+01  6.500000e+01  2.300000e+01 
   9.400000e+01  5.700000e+01  9.000000e+01</DIV>
  <DIV>[43]  3.200000e+01  4.700000e+01  1.600000e+01 
   5.000000e+01  2.800000e+01  3.000000e+00</DIV>
  <DIV>[49]  9.800000e+01  1.100000e+01  1.800000e+01 
   7.600000e+01  6.300000e+01  7.700000e+01</DIV>
  <DIV>[55]  7.400000e+01  4.900000e+01  8.000000e+00 
   9.700000e+01  1.200000e+01  2.700000e+01</DIV>
  <DIV>[61]  3.500000e+01  7.900000e+01  8.000000e+01 
   2.000000e+01  6.700000e+01  9.300000e+01</DIV>
  <DIV>[67]  5.000000e+00  5.600000e+01  9.000000e+00 
   3.700000e+01  2.400000e+01  9.200000e+01</DIV>
  <DIV>[73]  6.900000e+01  3.800000e+01  4.400000e+01 
   1.700000e+01  4.600000e+01  4.300000e+01</DIV>
  <DIV>[79]  3.400000e+01  1.900000e+01  2.000000e+00 
   9.500000e+01  7.200000e+01  1.000000e+00</DIV>
  <DIV>[85]  6.100000e+01  4.100000e+01  6.200000e+01 
   2.200000e+01  4.200000e+01  2.100000e+01</DIV>
  <DIV>[91]  8.400000e+01  4.800000e+01  7.800000e+01 
   7.300000e+01  3.000000e+01  5.900000e+01</DIV>
  <DIV>[97]  5.800000e+01  5.200000e+01  7.500000e+01</DIV>
  <DIV>> </DIV></DIV>
  <DIV><BR></DIV>
  <DIV>Ai não funcionou. Mandando o vetor e o n junto, tudo funcionava, então 
  acho que estou realizando alguma operação errada na chamada recursiva 
  ali.</DIV>
  <DIV><BR></DIV>
  <DIV>Olhando a descrição do comando aqui:</DIV>
  <DIV><A 
  href="http://www.cplusplus.com/reference/vector/vector/erase/">http://www.cplusplus.com/reference/vector/vector/erase/</A><BR></DIV>
  <DIV><BR></DIV>
  <DIV>Ele diz que apaga da memoria o valor, então imagino que talvez esteja 
  dando problema na volta da recursão. Acho que não é tão simples usar Rcpp 
  quanto imaginava.</DIV>
  <DIV>Quando no primeiro caso la ele diz "memory corruption: 0x098db548", esse 
  é o endereço de memoria que eu usei errado não é?</DIV>
  <DIV><BR></DIV>
  <DIV><BR></DIV>
  <DIV><BR></DIV></DIV>
  <DIV class=gmail_extra><BR><BR> </DIV></BLOCKQUOTE></BODY></HTML>