Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit 1 und 2-dimensionalen Arrays

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
20.09.2007, 13:36 Uhr
~marko
Gast


Hallo,
ich bin noch ziemlich neu hier und hoffe ihr könnt mir helfen.
Und zwar hab ich unterschiedliche viele 1dimensionale Arrays,
die sich auch bloß als solche einlesen lassen...
ich möchte die arrays gern zusammen in ein 2dimensionales array schreiben,
das geht aber nicht :-(

folgendes hab ich geschrieben:

all_pdLambda[][i] = pdLambda1[];
all_pdLambda[][i+1]= pdLambda2[];

wenn ich eine Zahl in die Klammern schreibe wird ja bloß die einzelne Variable
kopiert, aber ich will ja das ganze array kopieren, wie geht das?

vielen dank schon mal für eure hilfe...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.09.2007, 14:07 Uhr
~marko
Gast


bin jetzt selber auf die lösung gekommen,
ich nehm einfach ne schleife...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.09.2007, 14:42 Uhr
xXx
Devil


ehm kopieren kannst du mit std::memcpy aus dem Header <cstring> ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.09.2007, 16:45 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von xXx:
ehm kopieren kannst du mit std::memcpy aus dem Header <cstring> ...

aber nur bei basisdatentypen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.09.2007, 16:52 Uhr
0xdeadbeef
Gott
(Operator)


Wofür jibbet denn std::copy?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.09.2007, 19:14 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Zum kopieren?
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.09.2007, 20:59 Uhr
xXx
Devil


@FloSoft: Geht sowas nicht?

C++:
template <typename T>
class foo
{
    T* m_data;
    std::size_t m_size:

public:
    foo(std::size_t size) : m_size(size) { m_data = new T[m_size]; }

public:
    void push_back(T const& data)
    {
        T* tmp = new T[m_size + 1];
        std::memcpy(tmp, m_data, sizeof(T) * m_size);
        delete m_data;
        m_data = tmp;
        m_data[m_size++] = data;
    }
};

class bar
{
    struct data
    {
        unsigned int a;
        unsigned int b;
        data(unsigned int a, unsigned int b) : a(a), b(b) {}
    } m_data;
    
public:
    bar(unsigned int a, unsigned int b) : m_data(a, b) {}
};

int main()
{
    foo<bar> inst;
    inst.push_back(bar(10, 11));
}
Das soll nicht gehen? Glaub ich jetzt nicht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.09.2007, 22:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja das besteht ja nur aus basisdatentypen...

sobald du nicht mehr sicherstellen kannst, das alle daten hintereinander im gleichen speicherbereich liegen, bzw zur basisgröße gehört - klappts nicht mehr:


C++:
class bad {
  char *data;
  bad(std::string d) { data = new char[d.size()+1]; strcpy(data, d.c_str()); }
  ~bad() { delete[] data; }
};

int main()
{
    foo<bad> inst;
    inst.push_back(bad("this is bad"));
}



dein


C++:
sizeof(T)



liefert hier 4 - die daten von bad sind aber sonstwo auf dem heap und werden nicht kopiert, beim ersten


C++:
delete m_data;



was außerdem delete[] heißen muss, wird ~bad auf gerufen und data "this is bad" freigegeben. davor kopierst du aber die adresse in den neuen pointer -> crash sobald du versucht das neue bad zu verwenden.

Darum reine C-Funktionen und C++ sollte man nur mischen wenn man weiß was man tut.
--
class God : public ChuckNorris { };

Dieser Post wurde am 20.09.2007 um 22:30 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.09.2007, 22:30 Uhr
0xdeadbeef
Gott
(Operator)



Zitat von J-jayz-Z:
Zum kopieren?

Schön, dass immer jemand rhetorische Fragen als echte missversteht...

@xXx:

C++:
std::memcpy(tmp, m_data, sizeof(T) * m_size);


sollte

C++:
std::copy(m_data, m_data + m_size, tmp);


sein.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.09.2007, 22:38 Uhr
xXx
Devil


ja ok stimmt @FloSoft ... und deadbeafy hast dann natürlich recht ...
Aber wie ist denn dann bitte std::copy implementiert, dass das das hin bekommt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: