Ich habe eine verschachtelte Struktur for-Schleife und jetzt bin ich zu Beginn jeder Iteration des Vektors erneut erklärt:C++: Geschwindigkeit mit Vektor/Array optimieren?
void function (n1,n2,bound,etc){
for (int i=0; i<bound; i++){
vector< vector<long long> > vec(n1, vector<long long>(n2));
//about three more for-loops here
}
}
Dies ermöglicht es mir bei jeder Iteration zu „neu beginnen“, das, weil meine große Werke interne Operationen sind weitgehend in Form von vec [a] [b] + = ein Wert. Aber ich mache mir Sorgen, dass es für große n1 oder große n2 langsam ist. Ich kenne die zugrundeliegende Architektur von Vektoren/Arrays/etc nicht, also bin ich mir nicht sicher, was der schnellste Weg ist, um mit dieser Situation umzugehen. Soll ich stattdessen ein Array verwenden? Sollte ich es anders klären? Soll ich die Logik ganz anders handhaben?
EDIT: Die Größe des Vektors ändert technisch nicht jede Iteration (aber es kann sich auf Basis von Funktionsparametern ändern). Ich versuche einfach, es zu löschen/etc, so dass das Programm unter allen anderen Umständen so schnell wie möglich ist.
EDIT:
Meine Ergebnisse verschiedener Methoden:
Timings (for a sample set of data):
reclaring vector method: 111623 ms
clearing/resizing method: 126451 ms
looping/setting to 0 method: 88686 ms
posten Sie die 'drei weitere for loops', die Art der Datenstruktur, die Sie verwenden sollten, hängt davon ab, was Sie damit tun –
AFAIK der schnellste Weg, um einen Vektor zu löschen, ist zu std :: swap it (std :: swap (Vec, Vektor()). Könnte aber falsch sein. Imho ohne mehr über Ihren Algorithmus zu wissen, ist es schwer zu sagen, wie Justin sagt. –
Robinson
Wie groß sind 'gebunden',' n1' und 'n2' in Bezug auf jeden andere? – leftaroundabout