Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

13/09/2012 #1

Avatar de Unikfriend

Como eliminar elementos de un vector en C
Hola...
Alguien sabe porque no puedo eliminar un elemento de un vector en "C"
cuando este declarado como variable global?

es codigo lo baje de internet y funciona bien cuando "myvector"
esta declarado dentro del main. Pero si lo intento declarar como variable
global marca error:



Código:
 
#include <iostream.h>
#include <vector.h>
using namespace std;
vector<unsigned int> myvector;    //global
 
int main ()
{
unsigned int i;
//vector<unsigned int> myvector;   //local
 
for (i=1; i<=10; i++) myvector.push_back(i);
myvector.erase(myvector.begin() + 6);
myvector.erase(myvector.begin() + 2);
cout << "myvector contains:";
for (i=0; i<myvector.size(); i++)
cout << " " << myvector[i];
cout << endl;
return 0;
}
Si alguien tiene una idea de que me esta faltando
le agradeceria mucho me lo hagan saber.
de antemano muchas gracias.
Slds
14/09/2012 #2

Avatar de cosmefulanito04

Eso tiene toda la pinta de C++ (nunca programé en ese lenguaje, pero se parece a Java).

En "C" para trabajar con vectores dinámicos lo mejor es usar punteros y las funciones malloc/calloc seguido de un free c/vez que dejas de usar el recurso. Este tipo de elementos no existen en C++/Java o todos los lenguajes orientados a objetos.
14/09/2012 #3

Avatar de Unikfriend

Hi Cosme,

Si he utilizado el malloc/calloc pero queria utilizar un vector dinamico en ciertos casos.
hasta ahorita no encontrado algo que me explique si hay restriciones en cuanto a su uso.
Slds.

14/09/2012 #4

Avatar de cosmefulanito04

Bien, pero vos publicaste un código en C++, por eso la duda, ¿qué usas, C o C++?
14/09/2012 #5

Avatar de Unikfriend

Yo principalmente utilizo c++;
Este ejemplo tal cual lo baje de la pagina cplusplus.com.

Slds.
14/09/2012 #6

Avatar de cosmefulanito04

Bue como te dije yo nunca usé C++, por lo tanto no puedo ser de mucha utilidad. Pero si te sirve puedo tirarte una solución en C:

Código PHP:
....
char *puntero//Creo un puntero 
.....
vector=(char *)malloc(4);      // Reservo 4 bytes para el vector
*vector=1;  //Inicializo el vector con 1,2,3,4
*(vector+1)=2;
*(
vector+2)=3;
*(
vector+3)=4;
....
vector=eliminar_elemento(vector,2,4); //llamo a una función que elimine el 3er elemento del vector
...
free(vector); //libero la memoria usada por vector 
Código PHP:
char eliminar_elemento(char *vector,int indice,int tamanio_vector)
{
    
int cont;
    
char *auxiliar=NULL;

    if(
tamanio_vector>1)
        
auxiliar=(char *)malloc(tamanio_vector-1);
    else
        return 
vector;
    
    if(
auxiliar==NULL)
       return 
vector;  // Significa que no hay más memoria disponible en el sistema

    
for(cont=0;cont<tamanio_vector-1;cont++)
        {
            if(
cont<indice)
                *(
auxiliar+cont)=*(vector+cont);
            else
                *(
auxiliar+cont)=*(vector+cont+1);
        }

    
free(vector);
    return 
auxiliar;

Con esa función, liberás la memoria original del vector (osea los 4 bytes que pediste) y el vector pasa hacer el auxiliar con un elemento menos del vector original (osea solo 3 bytes), en este caso quedaría quedaría así:

vector original --> 1,2,3,4
vector final --> 1,2,4
14/09/2012 #7


Primero que todo, el ejemplo como ya lo mencionaron es c++, el tipo vector es exclusivo de c++.
Ahora, he probado el ejemplo, haciendo un par de pequeñas modificaciones y funciona perfectamente, no creo que exista ninguna limitación particular cuando esas variables son globales.

El ejemplo lo he compilado en linux usando g++, espero que te sirva y nos brindes mas información, por ejemplo que compilador estas usando.
Código:
#include <vector>
#include <iostream>
using namespace std;
vector<unsigned int> myvector;    //global
 
int main ()
{
    unsigned int i;
    //vector<unsigned int> myvector;   //local
     
    for (i=1; i<=10; i++) myvector.push_back(i);
    myvector.erase(myvector.begin() + 6);
    myvector.erase(myvector.begin() + 2);
    cout << "myvector contains:";
    for (i=0; i<myvector.size(); i++)
        cout << " " << myvector[i];
    cout << endl;
    return 0;
}
17/09/2012 #8

Avatar de Unikfriend

Hi MVB,

Estoy utilizando Visual C++ 2010 Express. pero nomas no funciona.
Creo que tendre que utilizar algo como lo que sugiere Cosme.
Slds.


17/09/2012 #9

Avatar de cosmefulanito04

Hace una cosa, probá con esto que es java y que se asemeja mucho a C++:

- Creas una clase llamada "eliminar_elemento_vector" (me mate con el nombre) y definís esta función:

Código PHP:
public class eliminar_elemento_vector {
    
    public 
int[] eliminar_elemento(int [] vector_original,int indice_a_eliminar)
    {
        
int[] vector_aux=new int[vector_original.length-1];
               
        for(
int cont=0;cont<vector_original.length-1;cont++)
        {
            if(
cont<indice_a_eliminar)
                
vector_aux[cont]=vector_original[cont];
            else
                
vector_aux[cont]=vector_original[cont+1];
        }
                
        return 
vector_aux;
    }
    

Ahora desde donde estés, simplemente creas el objeto de esa clase y llamás a la función para que reemplace el vector, ejemplo:

Código PHP:
public class Eliminar_elemento {

    
/**
     * @param args the command line arguments
     */
    
    
    
public static void main(String[] args) {
        
int[] vector={1,2,3,4};  //Creo el vector original
        
        
eliminar_elemento_vector eliminar=new eliminar_elemento_vector(); //Creo el objeto de la clase que mencione arriba
        
        
System.out.println("Tamaño vector original :"+String.valueOf(vector.length)+" Vector[2]= "+String.valueOf(vector[2])+"\n");  //Imprimo en consola el tamaño original del vector y el valor del elemento 3
        
        
vector=eliminar.eliminar_elemento(vector,2); //Llamo a la función eliminar_elemento de la clase antes mencionada y reemplazo el vector original por uno que tiene un elemento menos {1,2,4}
        
        
System.out.println("Tamaño vector final :"+String.valueOf(vector.length)+" Vector[2]= "+String.valueOf(vector[2])+"\n"); //Imprimo en consola el tamaño final del vector y el nuevo valor del elemento 3 (osea 4)
    
}

Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.