C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Array
Goto page Previous  1, 2, 3 ... 12, 13, 14, 15  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Markus Schaaf
Guest





PostPosted: Fri Sep 22, 2006 2:20 pm    Post subject: Re: STL ohne dynaischen Speicher Reply with quote



"Martin Kaul" <mkaul (AT) leuze (DOT) de> schrieb:

Quote:
Hmm, damit kann ich dann ja meine 10 1024er Blöcke rausschmeissen
(wieder Code gespart Smile und für die Allokierung zur Laufzeit den Heap
verwenden. Damit dies aber nicht extensiv genutzt wird und überprüfbar
ist, könnte ich einen Zähler mitlaufen lassen, welcher bei einem
bestimmten Zählerstand einen Fehler erzeugt.

Was Du tatsächlich willst und was Du brauchst können verschiedene
Dinge sein. Mag sein, Du brauchst ein Programm, daß zu keiner Zeit
mehr als 200k Speicher belegt. Dann ist der Heap nur eine Stelle,
die überlaufen kann. Der Stack kann es ebenso, nur hat man sich
in bestimmten Sprachen (sagen wir C(++)) daran gewöhnt, auf
Rekursion zu verzichten. Bleiben noch genug Möglichkeiten, wie
etwa 'alloca' oder riesige lokale Felder.

Wenn Du ein Programm hast, das mit Sicherheit bestimmte Eigen-
schaften haben soll, mußt Du diese Eigenschaften im Code sicher-
stellen. Genauso wie die Tatsache, daß das Programm 2 Jahre mit
Deinem Allokator lief, nicht beweist, daß es das noch einen Monat
länger tuen wird, gilt das auch für andere Annahmen, etwa den
Stack oder was für Resourcen noch knapp sein mögen (Timer, DMA-
Kanäle, Zeit). Leider bietet C++ keine eingebauten Möglichkeiten
zur Codeanalyse, noch macht die idiotisch komplexe Grammatik eine
externe Analyse einfach.

MfG
Back to top
Thomas Maeder
Guest





PostPosted: Mon Oct 09, 2006 8:51 pm    Post subject: Re: Portables Multithreading? Reply with quote



Sönke Müller-Lund <soenke@mueller-lund.de> writes:

Quote:
welche Ansätze gibt es für halbwegs portables Multithreading in C++?

Posix Threads
Boost.Threads


Quote:
Welche Libs sollte man verwenden und welche besser nicht? Welche
Ansätze sind dem Multithreading-Framework von Java ähnlich?

Keine Ahnung.
Back to top
albrecht.fritzsche
Guest





PostPosted: Tue Oct 10, 2006 10:54 pm    Post subject: Re: Portables Multithreading? Reply with quote



Thomas Maeder wrote:
Quote:
Sönke Müller-Lund <soenke@mueller-lund.de> writes:
welche Ansätze gibt es für halbwegs portables Multithreading in C++?

Posix Threads
Boost.Threads

und ACE.

Ali
Back to top
Raymond Haeb
Guest





PostPosted: Thu Oct 12, 2006 12:31 am    Post subject: Re: Portables Multithreading? Reply with quote

albrecht.fritzsche wrote:
Quote:
Thomas Maeder wrote:
Sönke Müller-Lund <soenke@mueller-lund.de> writes:
welche Ansätze gibt es für halbwegs portables Multithreading in C++?

Posix Threads
Boost.Threads

und ACE.

und Qt.


Raymond
Back to top
Guest






PostPosted: Mon Oct 30, 2006 10:27 pm    Post subject: Re: während Iterierung Elemente aus vector löschen Reply with quote

Andy schrieb:

Quote:
Hallo,

wie löscht man eigentlich korrekt Elemente aus einem vector, während man
in einer Schleife darüber iteriert?
Ich habe es jetzt in der Art probiert:

std::list<int> intVec;
intVec.push_back(0);
intVec.push_back(1);
intVec.push_back(2);
intVec.push_back(3);
intVec.push_back(4);

for (std::list<int>::iterator iter=intVec.begin();
iter!=intVec.end();
iter++)
{
if ((*iter==2)||(*iter==3))
iter=intVec.erase(iter);
}


Allerdings wird dabei in die "3" übersprungen und somit auch nicht gelöscht.
Wie macht man sowas denn richtig?

Gruß,
Andy

Standard sagt:
"The iterator returned from a.erase(q) points to the element immediatly
following q prior to the element being erased. If no such element
exists, a.end() is returned."

Also iter++ nach entfernen der 2 zeigt schon hinter die 3. Noch
schlimmer isses, wenn
du das letzte element loeschst, dann zeigt iter hinter intVec.end() und
du kriegst wohl nen
segfault.

Also machste am besten iter++ im schleifenbody in einem else Zweig.
Back to top
Hubert Schmid
Guest





PostPosted: Wed Nov 01, 2006 7:11 pm    Post subject: Re: während Iterierung Elemente aus vector löschen Reply with quote

sascha.krissler (AT) web (DOT) de writes:

Quote:
Andy schrieb:

wie löscht man eigentlich korrekt Elemente aus einem vector, während man
in einer Schleife darüber iteriert?

Der ursprüngliche Artikel ist bei mir leider nicht vorhanden. Daher
antworte ich hier.

Du schreibst von vector, verwendest aber eine std::list. Bei std::list
funktioniert es so, wie Sascha geschrieben hat:

std::list<int>::iterator i = values.begin();
std::list<int>::iterator j = values.end();

while (i != j) {
if (remove) {
i = values.erase(i);
} else {
++i;
}
}

Ich verwende häufig die folgende Variante, da diese auch mit std::set,
std::multiset, std::map und std::multimap funktioniert.

while (i != j) {
if (remove) {
values.erase(i++);
} else {
++i;
}
}

Bei std::vector funktioniert hingegen nur die erste Variante, und auch
nur, wenn man nach jedem erase der end-Iterator neu bestimmt.
Allerdings ist dieses Verfahren bei std::vector meistens eh
ungeeignet, da der Aufwand quadratisch in der Anzahl der Elemente ist.

Bei std::vector verwende ich nach Möglichkeit std::remove_if. Das
sieht dann so aus:

values.erase(std::remove_if(i, j, pred), j);

In einigen Faellen schreibe ich die Schleife auch selbst, insbesondere
dann, wenn innerhalb der Schleife noch mehr passiert. Dann sieht das
beispielsweise so aus:

std::vector<int>::iterator p = values.begin();
std::vector<int>::iterator q = values.end();
std::vector<int>::iterator r = p;

for (; p != q; ++p) {
if (!remove) {
if (p != r) {
*r = *p;
}
++r;
}
}

values.erase(r, q);

Bei komplexen Datentypen verwende ich meistens 'swap(*p, *r)' statt
'*p = *r', da das meistens wesentlich effizienter ist und keine
Ausnahmen geworfen werden können.

--
Hubert Schmid - http://www.z42.de
Back to top
Oliver Schneidewind
Guest





PostPosted: Sat Nov 18, 2006 7:58 pm    Post subject: Re: XOR Verknüpfung Reply with quote

Jan schrieb:
Quote:
[...]
Hier mein Code:

char s[256] = "";
char p[256] = "";
^

P ist laut dein Untenbeschrieben Algorythmus kein Feld sondern
ein einzelner char Value
Quote:

s[0] = 'X';
s[1] = 0x03;

dieses setz die ersten 2 Elemente des Array da du aber keine String

ende ( '\0') eingebaut hast, neigt dein vergleich auf strlen zum buffer
overflow, also entweder umbauen oder

s[2] = '\0';

einfügen.
Dann solltest du noch ein

p=0;

einfügen damit du bei deiner Checksumme nicht mit Haus nummern Operierst

Quote:
[...]
Oder muss meine Schleife so aussehen:

for( int i = 0; i < i<strlen(s); i++ )
{
p[i] ^= s[i];

richtig muss es sein :
p ^=s[i];

Quote:
}

Ich bekomme trotzdem nicht die 5B?
mit denn initialisierten p sollte es jetzt gehen,




Hoffe das Hilft

Oliver
Back to top
Thomas Maeder
Guest





PostPosted: Sat Nov 18, 2006 8:23 pm    Post subject: Re: XOR Verknüpfung Reply with quote

"Jan" <sentwickler (AT) yahoo (DOT) de> writes:

Quote:
ich muß folgende Prüfsumme mittels XOR-Verknüpfung bilden:

Byte

1 'X'

2 0x03 (End of Text)

Als Ergebnis muss ich 5B (Hexwert in zwei ASCII-Character) bekommen.

Hier mein Code:

char s[256] = "";
char p[256] = "";

s[0] = 'X';
s[1] = 0x03;

for(int i =0; i<strlen(s); i++)
{
p[i] ^= s[i%strlen(s)];
}

Oder muss meine Schleife so aussehen:

for( int i = 0; i < i<strlen(s); i++ )
{
p[i] ^= s[i];
}

Weder noch (siehe unten).

Grundsätzlich haben diese Schleifen aber das Problem, dass strlen()
strlen(s) mal aufgerufen wird. Der Aufwand der Berechnung ist somit
quadratisch in der Länge der Zeichenkette, statt linear, wie sie sein
könnte. Für die Länge 256 spielt das vermutlich keine Rolle, aber ich
weiss ja nicht, ob Du diese Länge nur für Deinen Post gesetzt hast.


Quote:
Ich bekomme trotzdem nicht die 5B?

Was mache ich da falsch? Kann mir hier jemand helfen ?

In der Doku steht:

Die Checksumme berechnet sich aus einer XOR-Verknüpfung aller
vorhergehenden Zeichen.

Checksumme = 0 XOR <char1> XOR <char2> ..... XOR ETX (End of Text)

Dessen Übertragung erfolgt in zwei Byte ASCII-Charactern.
Beispiel: Checksumme = 0x8A wird als '8A', also 0x38 gefolgt von 0x41
übertragen.

Du musst zuerst die Checksumme berechnen (als Zahl, Resultat 91 (dec))
und sie anschliessend geeignet formatieren (als zwei char-Objekte mit
den Werten '5' und 'B').

Das Problem sieht wie eine Hausaufgabe aus; überlege also bitte von
hier aus selbst weiter und frage zurück, wenn dabei weitere
Unklarheiten auftauchen.
Back to top
Jan
Guest





PostPosted: Sun Nov 19, 2006 8:13 pm    Post subject: Re: XOR Verknüpfung Reply with quote

Hallo Oliver,

das geht aber nicht!!

Darf ich Dich kurz um eine Codebeispielzeile bitten?

Danke
Jan

Oliver Schneidewind schrieb:

Quote:
Jan schrieb:
[...]
Hier mein Code:

char s[256] = "";
char p[256] = "";
^
P ist laut dein Untenbeschrieben Algorythmus kein Feld sondern
ein einzelner char Value

s[0] = 'X';
s[1] = 0x03;

dieses setz die ersten 2 Elemente des Array da du aber keine String
ende ( '\0') eingebaut hast, neigt dein vergleich auf strlen zum buffer
overflow, also entweder umbauen oder

s[2] = '\0';

einfügen.
Dann solltest du noch ein

p=0;

einfügen damit du bei deiner Checksumme nicht mit Haus nummern Operierst

[...]
Oder muss meine Schleife so aussehen:

for( int i = 0; i < i<strlen(s); i++ )
{
p[i] ^= s[i];

richtig muss es sein :
p ^=s[i];

}

Ich bekomme trotzdem nicht die 5B?
mit denn initialisierten p sollte es jetzt gehen,



Hoffe das Hilft

Oliver
Back to top
Jan
Guest





PostPosted: Sun Nov 19, 2006 8:45 pm    Post subject: Re: XOR Verknüpfung Reply with quote

Hallo Thomas,

Thomas Maeder schrieb:

Quote:

Du musst zuerst die Checksumme berechnen (als Zahl, Resultat 91 (dec))
und sie anschliessend geeignet formatieren (als zwei char-Objekte mit
den Werten '5' und 'B').


Genau, das will ich auch erreichen.

Dank den Code von Oliver Schneidewind bekomme ich jetzt als Resultat 91
(dec).
Aber mit der Formatierung habe ich jetzt ein Problem!!!

char s[256] = "";
char p = 0;

char summe[2];

s[0] = 'X';
s[1] = 0x03;
s[2] = '\0';

for( i = 0; i<strlen(s); i++ )
{
p ^=s[i];
}

Wie formatiere ich jetzt die 91(dec) in zwei char-Objekte mit den
Werten '5' und 'B'????

summe[0] = Was?????
summe[1] = ????


Bin für weitere Hilfe sehr dankbar...

Gruss Jan
Back to top
Thomas Maeder
Guest





PostPosted: Sun Nov 19, 2006 11:43 pm    Post subject: Re: XOR Verknüpfung Reply with quote

"Jan" <sentwickler (AT) yahoo (DOT) de> writes:

Quote:
Du musst zuerst die Checksumme berechnen (als Zahl, Resultat 91 (dec))
und sie anschliessend geeignet formatieren (als zwei char-Objekte mit
den Werten '5' und 'B').


Genau, das will ich auch erreichen.

Dank den Code von Oliver Schneidewind bekomme ich jetzt als Resultat 91
(dec).
Aber mit der Formatierung habe ich jetzt ein Problem!!!

char s[256] = "";
char p = 0;

char summe[2];

s[0] = 'X';
s[1] = 0x03;
s[2] = '\0';

for( i = 0; i<strlen(s); i++ )
{
p ^=s[i];
}

Wie formatiere ich jetzt die 91(dec) in zwei char-Objekte mit den
Werten '5' und 'B'????

Für die Umwandlung kannst Du sprintf() verwenden oder
std::ostringstream.
Back to top
Oliver Schneidewind
Guest





PostPosted: Sun Nov 19, 2006 11:55 pm    Post subject: Re: XOR Verknüpfung Reply with quote

Jan schrieb:

Quote:
[...]
Darf ich Dich kurz um eine Codebeispielzeile bitten?

Eigentlich ist eine newsgroup nicht dazu gedacht dir deine Hausaufgaben

zu machen und wie es scheint bist du noch ziemlich am Anfang eines lern
Prozesses, aber will mal nicht so sein.

#include <iostream>
#include <cstdlib>
#include <cstring>

int main(void )
{
char s[256];
char str[4];
char p;
unsigned int i;


// init. der checksumme
p=0x00;

// setzen der einzelnen Bytes
s[0] = 'X';
s[1] = 0x03;
s[2] = '\0';

// Berechnen der Checksumme
for ( i=0;i<strlen(s);i++) {
p^= s[i];
}

// mache aus denn HEX Ergbnis einen String
snprintf(str,sizeof(str),"%02X\t\n",p);

// Kontroll Ausgabe des String
std::cout<<" das Ergbins ist "<< str <<std::endl;

return 0;
}


das sollte gehen. Wenn es vielleicht auch nicht die Effektivste Methode
ist deine Probleme zu lösen.


Hoffe das Hilft

Oliver
Back to top
Jan
Guest





PostPosted: Mon Nov 20, 2006 3:35 am    Post subject: Re: XOR Verknüpfung Reply with quote

Hallo Oliver,

Vielen Dank für Deine Antwort und Deine Geduld mit mir :-)


Oliver Schneidewind schrieb:

Quote:
Jan schrieb:

[...]
Darf ich Dich kurz um eine Codebeispielzeile bitten?

Eigentlich ist eine newsgroup nicht dazu gedacht dir deine Hausaufgaben
zu machen und wie es scheint bist du noch ziemlich am Anfang eines lern
Prozesses, aber will mal nicht so sein.

#include <iostream
#include <cstdlib
#include <cstring

int main(void )
{
char s[256];
char str[4];
char p;
unsigned int i;


// init. der checksumme
p=0x00;

// setzen der einzelnen Bytes
s[0] = 'X';
s[1] = 0x03;
s[2] = '\0';

// Berechnen der Checksumme
for ( i=0;i<strlen(s);i++) {
p^= s[i];
}

// mache aus denn HEX Ergbnis einen String
snprintf(str,sizeof(str),"%02X\t\n",p);

// Kontroll Ausgabe des String
std::cout<<" das Ergbins ist "<< str <<std::endl;

return 0;
}


das sollte gehen. Wenn es vielleicht auch nicht die Effektivste Methode
ist deine Probleme zu lösen.


Hoffe das Hilft

Oliver
Back to top
Jan
Guest





PostPosted: Mon Nov 20, 2006 3:35 am    Post subject: Re: XOR Verknüpfung Reply with quote

Hallo Oliver,

vielen Dank für Deine Antwort und Deine Geduld mit mir :-)


Oliver Schneidewind schrieb:

Quote:
Jan schrieb:

[...]
Darf ich Dich kurz um eine Codebeispielzeile bitten?

Eigentlich ist eine newsgroup nicht dazu gedacht dir deine Hausaufgaben
zu machen und wie es scheint bist du noch ziemlich am Anfang eines lern
Prozesses, aber will mal nicht so sein.

#include <iostream
#include <cstdlib
#include <cstring

int main(void )
{
char s[256];
char str[4];
char p;
unsigned int i;


// init. der checksumme
p=0x00;

// setzen der einzelnen Bytes
s[0] = 'X';
s[1] = 0x03;
s[2] = '\0';

// Berechnen der Checksumme
for ( i=0;i<strlen(s);i++) {
p^= s[i];
}

// mache aus denn HEX Ergbnis einen String
snprintf(str,sizeof(str),"%02X\t\n",p);

// Kontroll Ausgabe des String
std::cout<<" das Ergbins ist "<< str <<std::endl;

return 0;
}


das sollte gehen. Wenn es vielleicht auch nicht die Effektivste Methode
ist deine Probleme zu lösen.


Hoffe das Hilft

Oliver
Back to top
Jan
Guest





PostPosted: Mon Nov 20, 2006 3:37 am    Post subject: Re: XOR Verknüpfung Reply with quote

Hallo Thomas,

vielen Dank für Deine Antwort, hat mir sehr geholfen.

Gruss Jan


Thomas Maeder schrieb:

Quote:
"Jan" <sentwickler (AT) yahoo (DOT) de> writes:

Du musst zuerst die Checksumme berechnen (als Zahl, Resultat 91 (dec))
und sie anschliessend geeignet formatieren (als zwei char-Objekte mit
den Werten '5' und 'B').


Genau, das will ich auch erreichen.

Dank den Code von Oliver Schneidewind bekomme ich jetzt als Resultat 91
(dec).
Aber mit der Formatierung habe ich jetzt ein Problem!!!

char s[256] = "";
char p = 0;

char summe[2];

s[0] = 'X';
s[1] = 0x03;
s[2] = '\0';

for( i = 0; i<strlen(s); i++ )
{
p ^=s[i];
}

Wie formatiere ich jetzt die 91(dec) in zwei char-Objekte mit den
Werten '5' und 'B'????

Für die Umwandlung kannst Du sprintf() verwenden oder
std::ostringstream.
Back to top
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Goto page Previous  1, 2, 3 ... 12, 13, 14, 15  Next
Page 13 of 15

 
 


Powered by phpBB © 2001, 2006 phpBB Group