Avatar billede qw_freak Nybegynder
24. maj 2010 - 20:46 Der er 10 kommentarer og
1 løsning

Vectorer i c, ikke C++

Kan man lave vectorer i C, ikke C++
hvis man kan, hvordan?
Avatar billede arne_v Ekspert
24. maj 2010 - 21:19 #1
Nej.

STL vector<> er en C++ feature.

I C vil du bruge arrays og nogle funktioner til at manipulere disse.
Avatar billede qw_freak Nybegynder
24. maj 2010 - 21:34 #2
Har du et forslag (evt. link) til at lave et "dynamisk" array som man kan ændre størrelse indtil der ikke længere bliver fyldt noget i det.

Det handler om at jeg aflæser nogen spændingsstørrelser fra en ADC og afhængig af frekvensen så kommer der forskellig antal samples ind i systemet!
Avatar billede arne_v Ekspert
24. maj 2010 - 21:48 #3
Du kan enten lave en linked liste eller goere det samme som vector goer - udvide array naar det loeber fuld.

Jeg vil anbefale det sidste.

Jeg kan godt lave et eksempel.

Hvorfor skal du bruge ren C og ikke C++ ?
Avatar billede arne_v Ekspert
24. maj 2010 - 22:05 #4
Hurtig bixet kode:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct vector
{
    int used;
    int total;
    int *data;
};

void init(struct vector *v)
{
    v->used = 0;
    v->total = 3;
    v->data = (int *)malloc(v->total * sizeof(int));
}

void add(struct vector *v, int val)
{
    if(v->used + 1 > v->total)
    {
        v->total *= 2;
        v->data = (int *)realloc(v->data, v->total * sizeof(int));
    }
    v->data[v->used] = val;
    v->used++;
}

void clear(struct vector *v)
{
    free(v->data);
    v->used = 0;
    v->total = 0;
    v->data = NULL;
}

int main()
{
    int i;
    struct vector iv;
    init(&iv);
    for(i = 0; i < 20; i++)
    {
        add(&iv, i);
    }
    for(i = 0; i < iv.used; i++)
    {
        printf("%d\n", iv.data[i]);
    }
    clear(&iv);
    return 0;
}
Avatar billede qw_freak Nybegynder
24. maj 2010 - 22:13 #5
jeg kan ikke bruge C++ fordi den hardware den skal compiles på ikke indeholder mere plads en 64mb...

det er i forbindelse med http://newz.dk/forum/software/skrive-til-mysql-database-fra-andet-system-101784#new som du også har hjulpet mig en del med!
Avatar billede arne_v Ekspert
24. maj 2010 - 22:17 #6
C++ burde kunne koere paa 64 MB.

Men du kan ogsaa lave noget C som vist ovenfor.
Avatar billede qw_freak Nybegynder
25. maj 2010 - 00:36 #7
der er ikke plads til compileren samtidig med de andre applicationer der også skal være.

der kan kun være effektivt 12 MB igang ad gangen!
Avatar billede arne_v Ekspert
25. maj 2010 - 00:47 #8
Øhm.

En ting er at compileren ikke kan køre samtidigt med resten, men det færdige program kunne måske godt køre alligevel.
Avatar billede returningTarzan Nybegynder
27. maj 2010 - 14:17 #9
Jeg har udviklet masser af C++ på embedded systemer med 32 MB RAM. C++ applikationer kræver ikke umiddelbart mere RAM end C applikationer. Det kommer helt an på, hvilken kode, du lader C++ generere for dig. Hvis det kun er compileren, der ikke er plads til, kan du jo f.eks. krydskompilere.

Ellers er der ikke nogen mulighed for en dynamisk array, der ligner vector fra C++. Det tætteste, du kommer, er Arnes eksempel ovenfor.
Avatar billede qw_freak Nybegynder
09. juni 2010 - 20:08 #10
arne_v, kan du ikke poste er svar så du kan få dine point?
Avatar billede arne_v Ekspert
09. juni 2010 - 20:28 #11
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester