Ich habe eine Zeitlang an diesem Code (oder anderen Codeprojekten) gearbeitet, obwohl ich weiß, was im Grunde mit dem Code nicht stimmt, Ich habe es schwer gefunden, genau herauszufinden, wo der Vektor außerhalb der Reichweite ist. Ich habe den ganzen Morgen gdb darauf gespielt, ohne Erfolg. Ich versuche einen Min-Heap aus einem Vektor "theData" in C++ zu machen.Std :: Vektor außerhalb des Bereichs für Min-Heap: C++
#include <iostream>
#include <vector>
#include <algorithm>
using std::vector;
using std::cin;
using std::cout;
using std::swap;
using std::pair;
using std::make_pair;
class HeapBuilder {
private:
vector<int> data_;
vector< pair<int, int> > swaps_;
void WriteResponse() const {
cout << swaps_.size() << "\n";
for (int i = 0; i < swaps_.size(); ++i) {
cout << swaps_[i].first << " " << swaps_[i].second << "\n";
}
}
void ReadData() {
int n;
cin >> n;
data_.resize(n);
for(int i = 0; i < n; ++i)
cin >> data_[i];
}
void makeMinHeap(vector<int> &theData, int i, int n) {
int minIndex;
int left = 2*i;
int right = 2*i + 1;
if (left < n && theData.at(left) < theData.at(i)) {
minIndex = left;
}
else if (right < n && theData.at(right) < theData.at(i)) {
minIndex = right;
}
if (minIndex != i) {
swap(theData.at(i), theData.at(minIndex));
swaps_.push_back(make_pair(i, minIndex));
makeMinHeap(theData, minIndex, n);
}
}
void GenerateSwaps() {
swaps_.clear();
int size = data_.size();
for (int i = (size/2); i >= 0; i--) {
makeMinHeap(data_, i, size);
}
}
public:
void Solve() {
ReadData();
GenerateSwaps();
WriteResponse();
}
};
int main() {
std::ios_base::sync_with_stdio(false);
HeapBuilder heap_builder;
heap_builder.Solve();
return 0;
}
Sollte es nicht 'gelassen werden
sshashank124
right' ich es geschrieben habe auf diese Weise früher, als ich versuchte, den Code zu debuggen und haben es wieder nach einigen Recherchen. Es macht jedoch keinen Unterschied in diesem Fehler. – Anonymous
Bitte versuchen Sie, genügend Code für eine [MVCE] (http://stackoverflow.com/help/mcve) zu zeigen. Der Code aus der Frage kann nicht kompiliert werden. Zum Beispiel werden die Variablen 'swaps_' und' data_' niemals deklariert. Es würde auch helfen, wenn Sie Testdaten zur Verfügung stellen, die die Funktion unterbrechen, selbst wenn sie für irgendwelche Daten bricht. –