(für mich) kniffliges speicherproblem
-
Kniffel schrieb:
Die Konvertierung in Strings ist sehr ineffizient.
Sind deine Funktionsergebnisse auch vom Typ int?ja, sind sie
also die konvertierung muss nicht unbedingt sein.ich muss die arrayeingräge nur verknüpfen und auf einen platz im vektor ablegen und ich muss diesen eintrag wiederfinden (aber durch den eintrag selbst nicht durch den index)
-
klaus-ludwig schrieb:
Kniffel schrieb:
Die Konvertierung in Strings ist sehr ineffizient.
Sind deine Funktionsergebnisse auch vom Typ int?ja, sind sie
also die konvertierung muss nicht unbedingt sein.ich muss die arrayeingräge nur verknüpfen und auf einen platz im vektor ablegen und ich muss diesen eintrag wiederfinden (aber durch den eintrag selbst nicht durch den index)
also kann es auch andere wege geben, welchen aber, weiß ich nicht...
-
Ja, vom Typ int. Ich habe deinen Quellcode noch nicht gesehen, als ich die Antwort geschrieben habe.
Wenn ich das richtig sehe, werden die Ergebnisse direkt in den Arrays gespeichert?
-
So könnte man die Elemente indizieren:
#include <stdio.h> #define N 5 int main() { int i, j=1, k=1; int arr[ ( N * ( N + 1 ) ) / 2 ]; for ( i = 0; i < ( N * ( N + 1 ) ) / 2; i++ ) { if ( j > N ) { k++; j = k; puts(""); } arr[i] = j; j++; printf("%d ", arr[i] ); } return 0; }
-
vielen dank.
nein, die es ist so:
array= ( 0 1 2 )
str << (012)
v[2].push_back(str.str)
also in etwa
v[0][0]=0
v[0][1]=1
v[1][0]=01
v[1][1]=10
v[2][0]=012
v[2][1]=123
uswund dann ein bestimmtes element suchen, ohne index, da die v verschieden lang sind und ich irgendwo in der mitte einen eintrag brauche...
-
also ich habe mal einen versuch gemacht:
vector<vector<string> > v ; vector<string>::iterator p; v.push_back(vector<string>()); //vector füllen mit irgendwas p = find(v[0].begin(),v[0].end(), 123);da kommt aber eine fehlermeldung betreffend die letzte zeile "no match for operator..."
im grunde habe ich das gleiche gemacht, wie auf einer hilfeseite, aber ob das mehrdimensional so klappt, weiß ich nicht
-
-
klaus-ludwig schrieb:
was ich vergessen habe:
mit...
funktioniert es auch nicht...sorry
-
klaus-ludwig schrieb:
p = find(v[0].begin(),v[0].end(), 123);Wozu die Umwandlung in Strings?
int arr[X]; for ( i=0; i<X; i++ ) { ... if ( arr[i] == 123 ) ...
-
Nimm einen vector für alle Ergebnisse. In diesem Vektor kommen die Ergebnisse nach Länge von groß nach klein sortiert rein. Für einen Eingabevektor { 1, 2, 3, 4 } sieht das result array so aus:
//Die Elemente der Länge 4 result[0] = berechne { 1, 2, 3, 4 } //Die Elemente der Länge 3 result[1] = berechne { 1, 2, 3 } result[2] = berechne { 2, 3, 4 } //Die Elemente der Länge 2 result[3] = berechne { 1, 2 } result[4] = berechne { 2, 3 } result[5] = berechne { 3, 4 } //Die Elemente der Länge 1 result[6] = berechne { 1 } result[7] = berechne { 2 } result[8] = berechne { 3 } result[9] = berechne { 4 }std::vector<int> input_vector; std::vector<int> results(input_vector.size() * (input_vector.size() + 1) / 2); //Ergibt das Ergebnis der Berechnung von index start_index bis //start_index + length -1 int & result_element(int start_index, int length) { int n = input_vector.size() - length; int base = n * (n+1) / 2; return results[base + start_index]; } // Befüllen des Ergebnisses for (int length = 1; length <= input_vector.size(); ++i) for (int start = 0; start + length <= input_vector.size(); ++start_index) result_element(start, length) = berechne(start, length);
-
ich hab hier alles nicht gelesen
nur als ich die problemstellung sah - dachte ich sofort an eine liste {stack waere umstaendlicher}
einfach ein liste anlegen {std::} und dort die zahlen reinpackenund dann in ein loop
while(numbers available) foreach number in list do anything with the number remove file from list end while
-
vielen vielen dank für die vorschläge
ihr habt mir sehr geholfen, danke!hat mit der liste geklappt und mit pontos vorschlag.