App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
C++ Newbie
- Ersteller McAvatar
- Erstellt am
McAvatar
Admiral Special
- Mitglied seit
- 11.08.2004
- Beiträge
- 1.268
- Renomée
- 8
- Standort
- Bielefeld, NRW
- Aktuelle Projekte
- Einstein@Home
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD X4 845
- Mainboard
- Asrock FM2A88X Extreme4+
- Speicher
- Kingston HyperX Predator 2x4GB 2400
- Grafikprozessor
- ATI 7850
- Display
- Asus VN279QLB
- SSD
- 1x Samsung Evo 500GB
- Optisches Laufwerk
- LG BD-ROM / DVD Rewriter
- Gehäuse
- Fractal Design Arc Midi R2
- Netzteil
- Seasonic G360
Hallo Leute!
Ich versuche gerade, mich an C++ heranzutasten. Mit Java, PHP und Python habe ich Erfahrung, bei C++ lerne ich gerade die Grundlagen - das hat den Haken, dass ich von Templates, der STL oder gar Boost überhaupt keine Ahnung habe.
Aber erst mal zur Entwicklungsumgebung: Im Moment nutze ich CodeBlocks mit MinGW. Um die Syntax zu prüfen, nehme ich Cppcheck. Eclipse CDT war meine erste Wahl, allerdings komme ich nicht mal mit der Konfiguration klar...
Da ich mich gerade mit dem Thema Entropie und Information beschäftigt habe, ist ein kleines Programm zur Ermittlung der Shannon-Entropie als Erstlingswerk entstanden. Hilfreich wäre, wenn jemand mit mehr Ahnung drübergucken könnte. Meine Lösung funktioniert zwar, ist aber vermutlich nicht ein Paradebeispiel für Eleganz.
Ich versuche gerade, mich an C++ heranzutasten. Mit Java, PHP und Python habe ich Erfahrung, bei C++ lerne ich gerade die Grundlagen - das hat den Haken, dass ich von Templates, der STL oder gar Boost überhaupt keine Ahnung habe.
Aber erst mal zur Entwicklungsumgebung: Im Moment nutze ich CodeBlocks mit MinGW. Um die Syntax zu prüfen, nehme ich Cppcheck. Eclipse CDT war meine erste Wahl, allerdings komme ich nicht mal mit der Konfiguration klar...
Da ich mich gerade mit dem Thema Entropie und Information beschäftigt habe, ist ein kleines Programm zur Ermittlung der Shannon-Entropie als Erstlingswerk entstanden. Hilfreich wäre, wenn jemand mit mehr Ahnung drübergucken könnte. Meine Lösung funktioniert zwar, ist aber vermutlich nicht ein Paradebeispiel für Eleganz.
Code:
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <math.h>
using namespace std;
const unsigned char ae = static_cast<unsigned char>(132);
const unsigned char oe = static_cast<unsigned char>(148);
int main(int argc, char *argv[]) {
if (argc < 2) {
cerr << "Zu wenig Argumente, mindestens ein Dateiname ist anzugeben.";
return 1;
}
for (int currentarg = 1; currentarg < argc; currentarg++) {
ifstream inFile(argv[currentarg]);
if (!inFile) {
cout << "Eingabedatei " << argv[currentarg] << " kann nicht ge" << oe << "ffnet werden.";
}
int in;
int data[256] = {0};
int symbolcounter = 0;
while (inFile.good()) {
in = inFile.get();
data[in]++;
symbolcounter++;
}
inFile.close();
cout << "Untersuchung der Datei " << argv[currentarg] << "\n";
cout << "H" << ae << "ufigkeiten der Symbole:\n";
double entropy = 0.0;
for (int i=0; i<256; i++) {
double p_i = (double)data[i] / (double)symbolcounter;
if (data[i] != 0) {
entropy -= p_i * (log(p_i) / log(2));
cout << char(i) << " " << data[i] << "\n";
}
}
cout << "Shannon-Entropie: " << entropy << " Bit pro Zeichen. \n \n";
}
return 0;
}
McAvatar
Admiral Special
- Mitglied seit
- 11.08.2004
- Beiträge
- 1.268
- Renomée
- 8
- Standort
- Bielefeld, NRW
- Aktuelle Projekte
- Einstein@Home
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD X4 845
- Mainboard
- Asrock FM2A88X Extreme4+
- Speicher
- Kingston HyperX Predator 2x4GB 2400
- Grafikprozessor
- ATI 7850
- Display
- Asus VN279QLB
- SSD
- 1x Samsung Evo 500GB
- Optisches Laufwerk
- LG BD-ROM / DVD Rewriter
- Gehäuse
- Fractal Design Arc Midi R2
- Netzteil
- Seasonic G360
Schon die nächste Frage...
Ich parse zeilenweise eine Datei und lege die relevanten Daten in einem struct pro Zeile ab. Mittels eines vectors von Zeigern auf structs speichere ich die gefunden Gesamtdaten ab.
Scheint mir so richtig zu sein.
Wie würde der Zugriff aber mit einem Iterator funktionieren?
Bekomme ich hier Zeiger auf structs zurück? Wie kann man die Elemente der structs ansprechen?
Ich parse zeilenweise eine Datei und lege die relevanten Daten in einem struct pro Zeile ab. Mittels eines vectors von Zeigern auf structs speichere ich die gefunden Gesamtdaten ab.
Code:
struct datum {
unsigned int startPos;
unsigned int endPos;
unsigned int direction;
};
vector<datum*> data;
datum* temp = new struct datum;
temp->startPos = atoi(vec.at(rptpos).c_str());
temp->endPos = endpos;
temp->direction = direction;
data.push_back(temp);
Scheint mir so richtig zu sein.
Code:
for (unsigned int i = 0; i < data.size(); i++) {
cout << data.at(i)->startPos << " " << data.at(i)->endPos << " " << data.at(i)->direction << endl;
}
Wie würde der Zugriff aber mit einem Iterator funktionieren?
Code:
for (vector<datum*>::iterator it = data.begin(); it!=data.end(); ++it) {
}
Bekomme ich hier Zeiger auf structs zurück? Wie kann man die Elemente der structs ansprechen?
The G
Lt. Commander
- Mitglied seit
- 22.04.2008
- Beiträge
- 128
- Renomée
- 2
- Standort
- Das schöne Allgäu
- Prozessor
- AMD Phenom II 965 C3 @ 3,8GHz
- Mainboard
- MSI 790GX-G65
- Kühlung
- EKL Nordwand
- Grafikprozessor
- Sapphire 3870
- Display
- LG W2442PA @ 1920x1080
- HDD
- Samsung Spinpoint F1 & F3
- Soundkarte
- Creative Sound Blaster X-FI Titanium
- Gehäuse
- Lancool K62
- Netzteil
- Arctic Cooling Fusion 550R
- Betriebssystem
- Windows 7 Ultimate 64bit
- Webbrowser
- Firefox
Mit *it oder it-> erhältst du das im vector gespeicherte Element, also hier einen Pointer. Den musst du nochmal derefernzieren um die Elemente selbst ansprechen zu können. Also:
Du kannst aber auch einen vector direkt aus structs erzeugen, dann ist die Syntax schöner. Man muss sich nur im klaren sein das der vector dann mit den Objekten/Structs selbst jongliert.
Code:
for (vector<datum*>::iterator it = data.begin(); it!=data.end(); ++it) {
cout << (*it)->startPos << " " << (*it)->endPos << " " << (*it)->direction << endl;
}
Du kannst aber auch einen vector direkt aus structs erzeugen, dann ist die Syntax schöner. Man muss sich nur im klaren sein das der vector dann mit den Objekten/Structs selbst jongliert.
Code:
for (vector<datum>::iterator it = data.begin(); it!=data.end(); ++it) {
cout << it->startPos << " " << it->endPos << " " << it->direction << endl;
}
McAvatar
Admiral Special
- Mitglied seit
- 11.08.2004
- Beiträge
- 1.268
- Renomée
- 8
- Standort
- Bielefeld, NRW
- Aktuelle Projekte
- Einstein@Home
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD X4 845
- Mainboard
- Asrock FM2A88X Extreme4+
- Speicher
- Kingston HyperX Predator 2x4GB 2400
- Grafikprozessor
- ATI 7850
- Display
- Asus VN279QLB
- SSD
- 1x Samsung Evo 500GB
- Optisches Laufwerk
- LG BD-ROM / DVD Rewriter
- Gehäuse
- Fractal Design Arc Midi R2
- Netzteil
- Seasonic G360
Danke,funktioniert.
Wie kann man am Besten die Performanz eines C++-Programms messen? Soweit ich das verstehe, misst clock() die CPU-Ticks, blendet also Laufzeiten anderer Programm aus, oder?
Wie kann man am Besten die Performanz eines C++-Programms messen? Soweit ich das verstehe, misst clock() die CPU-Ticks, blendet also Laufzeiten anderer Programm aus, oder?
The G
Lt. Commander
- Mitglied seit
- 22.04.2008
- Beiträge
- 128
- Renomée
- 2
- Standort
- Das schöne Allgäu
- Prozessor
- AMD Phenom II 965 C3 @ 3,8GHz
- Mainboard
- MSI 790GX-G65
- Kühlung
- EKL Nordwand
- Grafikprozessor
- Sapphire 3870
- Display
- LG W2442PA @ 1920x1080
- HDD
- Samsung Spinpoint F1 & F3
- Soundkarte
- Creative Sound Blaster X-FI Titanium
- Gehäuse
- Lancool K62
- Netzteil
- Arctic Cooling Fusion 550R
- Betriebssystem
- Windows 7 Ultimate 64bit
- Webbrowser
- Firefox
Zumindest bekommt man ungefähr die zwischen zwei Messungen verstrichene CPU-Zeit (Umrechnung mit dem Define CLOCKS_PER_SEC).
McAvatar
Admiral Special
- Mitglied seit
- 11.08.2004
- Beiträge
- 1.268
- Renomée
- 8
- Standort
- Bielefeld, NRW
- Aktuelle Projekte
- Einstein@Home
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD X4 845
- Mainboard
- Asrock FM2A88X Extreme4+
- Speicher
- Kingston HyperX Predator 2x4GB 2400
- Grafikprozessor
- ATI 7850
- Display
- Asus VN279QLB
- SSD
- 1x Samsung Evo 500GB
- Optisches Laufwerk
- LG BD-ROM / DVD Rewriter
- Gehäuse
- Fractal Design Arc Midi R2
- Netzteil
- Seasonic G360
Gut, ich versuch's mal damit. Und die nächste Frage: Wie kann ich eine Binärdatei einlesen und dabei das EOF ignorieren? Mein erster Ansatz war
Allerdings stoppt hier das Einlesen mit dem ersten 0x1A-Zeichen. Das kann aber in meinen Dateien durchaus vor dem Ende auftauchen.
Code:
while (inFile.good())
{
symbol = inFile.get();
Allerdings stoppt hier das Einlesen mit dem ersten 0x1A-Zeichen. Das kann aber in meinen Dateien durchaus vor dem Ende auftauchen.
Lynxeye
Admiral Special
- Mitglied seit
- 26.10.2007
- Beiträge
- 1.107
- Renomée
- 60
- Standort
- Sachsen
- Mein Laptop
- Lifebook T1010
- Prozessor
- AMD FX 8150
- Mainboard
- Gigabyte GA-970A-UD3
- Kühlung
- Zalman Reserator 1 Plus
- Speicher
- 4x8GB DDR3-1600 G.Skill Ripjaws
- Grafikprozessor
- ASUS ENGTX 260
- Display
- 19" AOC LM928 (1280x1024), V7 21" (1680x1050)
- HDD
- Crucial M4 128GB, 500GB WD Caviar 24/7 Edition
- Optisches Laufwerk
- DVD Multibrenner LG GSA-4167B
- Soundkarte
- Creative Audigy 2 ZS
- Gehäuse
- Amacrox Spidertower
- Netzteil
- Enermax Liberty 500W
- Betriebssystem
- Fedora 17
- Webbrowser
- Firefox
- Verschiedenes
- komplett Silent durch passive Wasserkühlug
Du musst dem Inputfilestream sagen, dass du eine Binärdatei lesen willst. Beim öffnen also ios::binary mit angeben.
McAvatar
Admiral Special
- Mitglied seit
- 11.08.2004
- Beiträge
- 1.268
- Renomée
- 8
- Standort
- Bielefeld, NRW
- Aktuelle Projekte
- Einstein@Home
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD X4 845
- Mainboard
- Asrock FM2A88X Extreme4+
- Speicher
- Kingston HyperX Predator 2x4GB 2400
- Grafikprozessor
- ATI 7850
- Display
- Asus VN279QLB
- SSD
- 1x Samsung Evo 500GB
- Optisches Laufwerk
- LG BD-ROM / DVD Rewriter
- Gehäuse
- Fractal Design Arc Midi R2
- Netzteil
- Seasonic G360
Yep, läuft!
McAvatar
Admiral Special
- Mitglied seit
- 11.08.2004
- Beiträge
- 1.268
- Renomée
- 8
- Standort
- Bielefeld, NRW
- Aktuelle Projekte
- Einstein@Home
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD X4 845
- Mainboard
- Asrock FM2A88X Extreme4+
- Speicher
- Kingston HyperX Predator 2x4GB 2400
- Grafikprozessor
- ATI 7850
- Display
- Asus VN279QLB
- SSD
- 1x Samsung Evo 500GB
- Optisches Laufwerk
- LG BD-ROM / DVD Rewriter
- Gehäuse
- Fractal Design Arc Midi R2
- Netzteil
- Seasonic G360
Tja, mal wieder eine Frage zum Thema:
Ich erzeuge eine Reihe von Objekten, die ich zu einer Liste hinzufüge.
Wie kann ich jetzt die Liste als Parameter an eine Funktion übergeben? Der "normale" Weg, einfach den Typ std::list<CodedMarker> des Parameters anzugeben scheint ja nicht zu funktionieren.
.
EDIT :
.
Gut, pointer in einem STL-Container zu speichern, scheint keine gute Idee zu sein.
Also doch eher:
Aber das nur nebenbei.
Ich erzeuge eine Reihe von Objekten, die ich zu einer Liste hinzufüge.
Code:
std::list<CodedMarker*> rptList;
CodedMarker* marker = new CodedMarker(parseBuffer);
rptList.push_back(marker);
Wie kann ich jetzt die Liste als Parameter an eine Funktion übergeben? Der "normale" Weg, einfach den Typ std::list<CodedMarker> des Parameters anzugeben scheint ja nicht zu funktionieren.
.
EDIT :
.
Gut, pointer in einem STL-Container zu speichern, scheint keine gute Idee zu sein.
Also doch eher:
Code:
rptList.push_back(CodedMarker(parseBuffer));
Aber das nur nebenbei.
McAvatar
Admiral Special
- Mitglied seit
- 11.08.2004
- Beiträge
- 1.268
- Renomée
- 8
- Standort
- Bielefeld, NRW
- Aktuelle Projekte
- Einstein@Home
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD X4 845
- Mainboard
- Asrock FM2A88X Extreme4+
- Speicher
- Kingston HyperX Predator 2x4GB 2400
- Grafikprozessor
- ATI 7850
- Display
- Asus VN279QLB
- SSD
- 1x Samsung Evo 500GB
- Optisches Laufwerk
- LG BD-ROM / DVD Rewriter
- Gehäuse
- Fractal Design Arc Midi R2
- Netzteil
- Seasonic G360
Hallo Leute,
ich habe eine Header-Datei Fibonacci.h, in der die Funktion probeFirstCoding deklariert wird:
Die entsprechende Funktion ist in der Fibonacci.cpp definiert:
Ich kann diese Konstruktion allerdings nicht kompilieren:
Ich nehme mal an, das liegt an der Verwendung des vectors. Ich hab leider keine Idee, was ich ändern muss. Rufe ich die Funktion über die Datei auf, in der main() steht, ist das Kompilieren kein Problem.
ich habe eine Header-Datei Fibonacci.h, in der die Funktion probeFirstCoding deklariert wird:
Code:
#include "CodedRepeatMarker.h"
class Fibonacci {
enum codingType {BINARY, FIBONACCI};
/***************************************************************************/
public:
codingType probeFirstCoding(const std::vector<CodedRepeatMarker>& repeatList);
Die entsprechende Funktion ist in der Fibonacci.cpp definiert:
codingType Fibonacci:robeFirstCoding(const std::vector<CodedRepeatMarker>& repeatList) {
...
Ich kann diese Konstruktion allerdings nicht kompilieren:
Code:
Fehler: »CodedRepeatMarker« wurde in diesem Gültigkeitsbereich nicht definiert
Fehler: Templateargument 1 ist ungültig
Fehler: Templateargument 2 ist ungültig
Ich nehme mal an, das liegt an der Verwendung des vectors. Ich hab leider keine Idee, was ich ändern muss. Rufe ich die Funktion über die Datei auf, in der main() steht, ist das Kompilieren kein Problem.
The G
Lt. Commander
- Mitglied seit
- 22.04.2008
- Beiträge
- 128
- Renomée
- 2
- Standort
- Das schöne Allgäu
- Prozessor
- AMD Phenom II 965 C3 @ 3,8GHz
- Mainboard
- MSI 790GX-G65
- Kühlung
- EKL Nordwand
- Grafikprozessor
- Sapphire 3870
- Display
- LG W2442PA @ 1920x1080
- HDD
- Samsung Spinpoint F1 & F3
- Soundkarte
- Creative Sound Blaster X-FI Titanium
- Gehäuse
- Lancool K62
- Netzteil
- Arctic Cooling Fusion 550R
- Betriebssystem
- Windows 7 Ultimate 64bit
- Webbrowser
- Firefox
Hmm... in der Definition scheint erstmal der Scope für das Enum zu fehlen:
EDIT:
Noch ein Nachtrag zu
Code:
[B]Fibonacci::[/B]codingType Fibonacci::probeFirstCoding(const std::vector<CodedRepeatMarker>& repeatList) {
...
EDIT:
Noch ein Nachtrag zu
Pointer in Containern können schon ne gute Idee sein, solang man darauf achtet den allokierten Speicher auch irgendwann wieder freizugeben. Und natürlich ist der Typ zur Übergabe nicht mehr std::list<CodedMarker> sondern eben auch std::list<CodedMarker*>. Ganz einfach.Wie kann ich jetzt die Liste als Parameter an eine Funktion übergeben? Der "normale" Weg, einfach den Typ std::list<CodedMarker> des Parameters anzugeben scheint ja nicht zu funktionieren.
Gut, pointer in einem STL-Container zu speichern, scheint keine gute Idee zu sein.
Zuletzt bearbeitet:
Tuxist
Commander
- Mitglied seit
- 02.05.2005
- Beiträge
- 154
- Renomée
- 0
- Prozessor
- Phenom X6 T1100
- Mainboard
- GA-970A-D3
- Kühlung
- Artic Cooling
- Speicher
- 16 GB
- Grafikprozessor
- VTX3D RADEON HD 7970
- Display
- 3 x VIEW SONIC 27 Zoll
- SSD
- OCZ RevoDrive 110GB
- HDD
- 6 x 3,5 1TB Hitachi
- Optisches Laufwerk
- Plextor DVD-Brenner
- Soundkarte
- XFI
- Gehäuse
- LianLi W750 Black Windows
- Netzteil
- be quiet! Dark Power Pro 10 750W
- Betriebssystem
- Kubuntu 12.04
- Webbrowser
- Chromium
- Verschiedenes
- Workstation Dibsi
Mit Boost würde ich mich nicht sehr stark auseinander setzten CXX11 hat viele Sachen jetzt drinne die Boost auch anbietet.
Zum mal würde ich statische Funktionen nur dar deklarieren wo man sieh unbedingt benötigt, ansonsten wird es Kompliziert mit Multithreading.
VS 11
GCC < 4.4
Unterstützen schon eine große untermenge des neuen Standards
Zum mal würde ich statische Funktionen nur dar deklarieren wo man sieh unbedingt benötigt, ansonsten wird es Kompliziert mit Multithreading.
VS 11
GCC < 4.4
Unterstützen schon eine große untermenge des neuen Standards
Zuletzt bearbeitet:
Ähnliche Themen
- Antworten
- 3
- Aufrufe
- 7K
- Antworten
- 0
- Aufrufe
- 3K