elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17 18 19 20
61  Programación / Programación C/C++ / iteratores de flujo....inicializacion de vector, etc. en: 28 Julio 2019, 23:57 pm
Hola amigos.. que tal.

Tengo una gran duda, la verdad me confunde un poco el hecho de que se pueda inicializar una variable de 3 formas:

Código
  1. int x = 3;
  2. int y {4};
  3. int z(5);
  4.  

Las 3 son válidas, bueno, así como se ve, no está complejo realmente, el problema es cuando usas elementos como un contenedor.. ya que los contenedores aceptan una lista de argumentos encerradas en llave, sin embargo esto me confunde un poco, porque no se cuando está inicializando o cuando está pasando por argumento a un constructor.. o cuando está usando un constructor de conversión.. etc..


Ejemplo:
Código
  1.  
  2. vector<string> vs { "Hola", " Que tal"};     //No hay problema..
  3. vector<string> vs2 { 5, 1 };                     //Houston
  4.  
  5. istream_iterator<string> is;
  6. istream_iterator<string> is2;
  7.  
  8. vector<string> vs3{is, is2};                     //No hay problema.. por que?
  9.  
  10.  


Sospecho que en vs3 no estoy inicializando … pensé que las llaves eran para eso... que esta pasando en esta línea?..


Saludos y gracias.


--------------------------------

Edito:

Estuve viendo los constructores que tiene std::vector y encontre uno que acepta un iterator de inicio y otro de fin... entonces eso es lo que debe estar aceptando, es decir,  vs3 no esta inicializando, solo le estoy pasando los iteradores que están conectados al flujo de entrada ifstream....  En el fondo lo que me habia confundido es el uso de las llaves, tenia entendido que las llaves servian para inicializar en los contenedores, pero ya vi que hace lo mismo que los parentesis, a menos que este poblando al contenedor, ahi seria una inicialización...

Saludos.
62  Programación / Programación C/C++ / Re: ERROR EN PROGRAMA [Error] a function-definition is not allowed here before '{' t en: 8 Julio 2019, 23:02 pm
El switch-case esta cortado por las definiciones de funciones. Si metes las funciones al final, se acaba el problema:

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <conio.h>
  4. #include <stdlib.h>
  5.  
  6. using namespace std;
  7.  
  8. void pausa();
  9.  
  10. struct Nodo{
  11.   int dato;
  12.   Nodo *siguiente;
  13. };
  14.  
  15.  
  16.  
  17.  
  18. //Prototipos de Función
  19. void agregarPila(Nodo *&,int);
  20. void sacarPila(Nodo *&,int &);
  21. void mostrarPila(Nodo *&,int &);
  22. int main(){
  23.    bool bandera=false;
  24.    char tecla;
  25.  
  26.    do{
  27.        system("cls");
  28.        cin.clear();
  29.        cout << "Calculadora" << endl;
  30.        cout << "-----------" << endl << endl;
  31.        cout << "\t1 .- Sumar" << endl;
  32.        cout << "\t2 .- Restar" << endl;;
  33.        cout << "elige una opcion: ";
  34.  
  35.        cin >> tecla;
  36.  
  37.      switch(tecla){
  38.         case '1':
  39.                {
  40.                Nodo *pila = NULL;   //Inicializamos pila
  41.                int dato, aux;
  42.                char rpt;
  43.                aux=5;
  44.                do{ //Pedimos todos los elementos de la pila
  45.                    //cout<<"Digite un numero: ";
  46.                    //cin>>dato;
  47.                    if (aux<=0||aux>5){
  48.                        cout<<"Alcanzo los 5 digitos: ";
  49.                        break;
  50.                    }
  51.                    cout<<"Digite un numero: ";
  52.                    cin>>dato;
  53.  
  54.                    if(dato==0){
  55.                        if((aux==5)||(aux==4)||(aux==2)||(aux==1)||(aux==0)){
  56.                            //cout<<aux-1;
  57.                            agregarPila(pila,dato);
  58.                        } else {
  59.                            cout<<"\nNO ES UN VALOR ACEPTADO: ";
  60.                            break;
  61.                        }
  62.  
  63.                        aux=aux-1;
  64.                        cout<<aux;
  65.                    }
  66.  
  67.  
  68.                if(dato==1){
  69.                    if(aux==3){
  70.                        //cout<<aux-1;
  71.                        agregarPila(pila,dato);
  72.                    } else {
  73.                        cout<<"\nNO ES UN VALOR ACEPTADO: ";
  74.                        break;
  75.                    }
  76.                    aux=aux-1;
  77.                    cout<<aux;
  78.                }
  79.  
  80.                if (aux<=0 || aux>5){
  81.                    cout<<"\n\nAlcanzo los 5 digitos: ";
  82.                    break;
  83.                }          
  84.  
  85.                cout<<"\nDesea agregar otro numero a pila(s/n): ";
  86.                cin>>rpt;
  87.  
  88.            } while((rpt == 's')||(rpt=='S'));
  89.  
  90.      //if (aux<=0||aux>5)
  91.      //{
  92.         //   cout<<"Alcanzo los 5 digitos: ";
  93.            //break;
  94.        //}
  95.  
  96.  
  97.   //cout<<"\nIMPRESION #2: \n";
  98.   //cout<<"\nIMPRESION #2: \n";
  99.            cout<<"Mostrando los elementos de la pila en la columna ENTRADA: ";
  100.   //while(pila != NULL){
  101.   //   sacarPila(pila,dato);
  102.  
  103.   //   if(pila != NULL){
  104.   //      cout<<dato<<" , ";
  105.   //   }
  106.   //   else{
  107.   //      cout<<dato<<".";
  108.   //   }
  109.   //}
  110.  
  111.  
  112.   //cout<<"\n\n\nIMPRESION #2: \n";
  113.            cout<<"\n\tESTADO\tENTRADA\tRESULTADO\n";
  114.  
  115.            int a=0;
  116.            int b=0;
  117.  
  118.  
  119.            while(pila != NULL){
  120.                sacarPila(pila,dato);
  121.  
  122.                if(pila != NULL){
  123.                    cout<<"\t q"<<a<<"\t "<<dato<<"\t q"<<b<<"\n";
  124.                    if((a==0)&&(b==0)){
  125.                        a=0+dato;
  126.                        b=0+dato;
  127.                    } else {
  128.                        a=1;
  129.                        b=1;
  130.                    }
  131.                } else{
  132.                    cout<<"\t q"<<a<<"\t "<<dato<<"\t q"<<b<<"\n";
  133.                }
  134.            }
  135.  
  136.  
  137.            getch();
  138.            return 0;
  139.  
  140.        }
  141.  
  142.  
  143.         case '2':
  144.            system("cls");
  145.            cout << "Has elejido Restar.\n";
  146.            pausa();
  147.            break;
  148.  
  149.         default:
  150.            system("cls");
  151.            cout << "Opcion no valida.\a\n";
  152.            pausa();
  153.            break;
  154.      }
  155.    }while(bandera!=true);
  156.  
  157.    return 0;
  158. }
  159.  
  160. void pausa()
  161. {
  162.    cout << "Pulsa una tecla para continuar...";
  163.    getwchar();
  164.    getwchar();
  165. }
  166.  
  167. void agregarPila(Nodo *&pila,int n){
  168.   Nodo *nuevo_nodo = new Nodo();
  169.   nuevo_nodo->dato = n;
  170.   nuevo_nodo->siguiente = pila;
  171.   pila = nuevo_nodo;
  172.  
  173.   cout<<"\n\tElemento "<<n<<" agregado a PILA correctamente"<<"\n";
  174. }
  175. void sacarPila(Nodo *&pila,int &n){
  176.   Nodo *aux = pila;
  177.   n = aux->dato;
  178.   pila = aux->siguiente;
  179.   delete aux;
  180. }
  181. void mostrarPila(Nodo *&pila,int &n){
  182.   Nodo *aux = pila;
  183.   n = aux->dato;
  184.   pila = aux->siguiente;
  185.   delete aux;
  186. }
  187.  
63  Programación / Programación C/C++ / Re: Error C2662 - const en: 8 Julio 2019, 04:40 am
Asi es, lo he notado, no pude declarar las funciones no miembro como const... pero no me haré problemas al menos por ahora y las declarare como funciones miembro...

saludos.
64  Programación / Programación C/C++ / Re: Error C2662 - const en: 8 Julio 2019, 03:53 am
Muy bien, buenísimas explicaciones, me quedó claro, entonces es una regla del compilador todo esto, ahora le hallo sentido...

@Loretz si tienes tu libro a mano, veras que en la pagina 78 se usa la version const, pero en la pagina 77 solo están definidos begin() y end() de forma no constante... entonces supongo que la reseña esta imcompleta... verdad?
65  Programación / Programación C/C++ / Re: asignacion de array dinamico usando una variable no inicializada.. en: 7 Julio 2019, 21:14 pm
Entiendo!.. gracias por contestar!

He estado observando en el libro que estoy estudiando otras cosas que no me parecen (yo a pesar de ser un poco novato) muy comprensibles...

Luego me puse a indagar sobre las Erratas del libro y me tope con esto:
http://www.stroustrup.com/4th_printing3.html

Como verán en la pagina 74 (que es justo el punto que quería discutir en este post), en realidad el problema es por una cuestion de impresion, es decir, lo que esta escrito en la pagina 74 fue sin intencion (por algun minuto se me paso que podia ser asi y que se habia cometido un error)..


Dice:
pg 74, top: s/new double[sz]/new double[a.sz]/

...por lo que new double[a.sz] tiene mucho mas sentido que lo anterior...

Saludos!
66  Programación / Programación C/C++ / Error C2662 - const en: 7 Julio 2019, 18:15 pm
Hola amigos..

En el siguiente código, si yo quito la palabra const (línea 52) derivada de un template tipo C, el programa corre....


Link -> https://onlinegdb.com/SyW1F9kWS
Hagan clic en Fork para probar el código.

Estuve buscando por què pasa esto, segun el compilador no pudo realizar una conversion de un tipo que no es const a uno que es const...  entiendo que quitando la palabra const se acaba el problema, pero por que?.. y si no deseo retirar la palabra const donde mas debería agregarla para que pueda compilar?... (Pasa que el libro que estudio aparece con const, ero no veo diferencia realmente con lo que tengo).

Gracias.



Bueno, según un usuario de discord, me dijo que las funciones begin() y end() deben ser const también, y efectivamente colocándolas asi compiló correctamente.

Pero es curioso porque en el libro que estudio, dichas funciones no son const..

Ahora mismo estoy investigando por que´.



Si yo coloco las funciones begin() y end() como funciones no miembro, es decir, fuera de la clase o estructura, el compilador no las detecta...

Lnik -> https://onlinegdb.com/SJgL5ayZH


Debe forzosamente ser funciones miembro?

EI: NO HAGAS DOBLE POST NUEVAMENTE, SERA BORRADO.
67  Programación / Programación C/C++ / Re: asignacion de array dinamico usando una variable no inicializada.. en: 7 Julio 2019, 17:55 pm
Entonces en tal caso no sería mejor inicializar tam y luego iArray con tam? o colocar primero en el campo privado del struct a tam y en la siguiente línea al array...
68  Programación / Programación C/C++ / Re: asignacion de array dinamico usando una variable no inicializada.. en: 6 Julio 2019, 20:39 pm
ok, el compilador determina esto siempre y cuando se este evaluando la línea actual o no?

Edit: Ya me quedo claro gracias.!
69  Programación / Programación C/C++ / asignacion de array dinamico usando una variable no inicializada.. en: 6 Julio 2019, 19:35 pm
Hola amigos. que tal.

Tengo el siguiente caso:
Código
  1.  
  2. #include <iostream>
  3. #include <initializer_list>
  4.  
  5. struct x {
  6. private:
  7.     int * iArray = nullptr;
  8.     int tam;       //Sin inicializar
  9.  
  10. public:
  11.     x(std::initializer_list<int> lst) : iArray{new int[lst.size()}, tam{lst.size()}{
  12.          std::copy(lst.begin(), lst.end(), iArray);
  13.     }
  14.  
  15.     //Constructor de copia
  16.     x(const x & otherX);
  17.  
  18. };
  19.  
  20. //Definición de constructor de copia (notar aquí que al momento de hacer
  21. //la primera inicialización tam no ha recibido valor.
  22. x::x(const x & otherX) : iArray{new int[tam]}, tam{otherX.tam}{
  23.     for (int y = 0; y < tam; ++y){
  24.          iArray[y] = otherX.iArray[y];
  25.     }
  26. }
  27.  
  28. int main (){
  29.     x x0 {2, 4, 6};
  30.     x x1 = x0;   //copia correcta...
  31.  
  32.     //prueba directa de asignacion de una variable no definida a un array dinamico:
  33.  
  34.     int x;
  35.     int * arr = new int[x];     //error, x no está definida.
  36. }
  37.  

Como se puede observar, en la linea 22 se está inicializando el array dinamico con un tamaño de tam antes que inicializar al mismo tam, o sea, se esta inicializando con un valor desconocido...  sin embargo, esta funcionando bien, ahora bien, en la linea 35, se esta intentando crear un array dinamico con un tamaño x, pero no sirvio.... acaso la inicialización funciona distinto a la asignacion?

Gracias, saludos.

70  Programación / Programación C/C++ / Re: que editor usan en: 24 Junio 2019, 19:15 pm
Vim
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17 18 19 20
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines