ich eine Datei zu lesen und Vektoren, die von ihm zu schaffen, und nach, dass ich versuche eine subvector zu extrahieren wie folgt:C++ Fehler beim subvector Extrahieren nach Lesen der Datei
vector<double> v = {1, 2, 3, 4, 5};
displayVector(v);
vector<double> v2(&v[1], &v[v.size()]);
displayVector(v2);
In diesem Fall der Code funktioniert und im nur das erste Merkmal aus dem ursprünglichen Vektor zu entfernen, konnte ich auch so etwas wie:
v.erase(v.begin());
die auch geben Sie mir die gewünschte Ausgabe, aber für meine Anwendung ist interessant, die erste Möglichkeit.
Das Problem hier ist, dass ich aus einer Datei lesen und die Vektoren erstellen. Eine solche Datei sieht wie folgt aus:
1000025,5,1,1,1,2,1,3,1,1,2
1002945,5,4,4,5,7,10,3,2,1,2
1015425,3,1,1,1,2,2,3,1,1,2
1016277,6,8,8,1,3,4,3,7,1,2
1017023,4,1,1,3,2,1,3,1,1,2
1017122,8,10,10,8,7,10,9,7,1,4
1018099,1,1,1,1,2,10,3,1,1,2
1018561,2,1,2,1,2,1,3,1,1,2
1033078,2,1,1,1,2,1,1,1,5,2
1033078,4,2,1,1,2,1,2,1,1,2
1035283,1,1,1,1,1,1,3,1,1,2
1036172,2,1,1,1,2,1,2,1,1,2
1041801,5,3,3,3,2,3,4,4,1,4
1043999,1,1,1,1,2,3,3,1,1,2
1044572,8,7,5,10,7,9,5,5,4,4
1047630,7,4,6,4,6,1,4,3,1,4
1048672,4,1,1,1,2,1,2,1,1,2
1049815,4,1,1,1,2,1,3,1,1,2
1050670,10,7,7,6,4,10,4,1,2,4
1050718,6,1,1,1,2,1,3,1,1,2
1054590,7,3,2,10,5,10,5,4,4,4
1054593,10,5,5,3,6,7,7,10,1,4
1056784,3,1,1,1,2,1,2,1,1,2
Wo der erste ist für mich nicht interessant koordinieren, hier ist mein Code:
void displayVector (std::vector<double> &v) {
for (auto &feature : v) {
std::cout << feature << " ";
}
std::cout << std::endl;
}
void displayTrainingSet(vector<FeaturedVector> &data) {
for (auto a : data) {
displayVector(a);
}
}
int main(int argc, char const *argv[]) {
ifstream file;
string filename = "breast-cancer.data";
file.open(filename, std::ifstream::in);
vector<FeaturedVector> data;
while (file.good()) {
string line;
getline(file, line);
istringstream buffer(line);
double feature;
vector<double> v;
while (buffer >> feature) {
if (buffer.peek() == ',') {
buffer.ignore();
}
v.push_back(feature);
}
vector<double> v1(&v[1], &v[v.size()]);
data.push_back(v1);
}
file.close();
//displayTrainingSet(data);
return 0;
}
Der obige Code kompiliert, aber wenn ich versuche, es zu laufen, gibt mir die seltsame Fehler, die durch den Zeilenvektor v1 (& v [1], & v [Bildhöhe()]) verursacht wird:
libc++abi.dylib: terminating with uncaught exception of type std::length_error: vector
Abort trap: 6
jemand tut, warum dies geschieht? Ich weiß, dass das Lesen aus der Datei und das Erstellen des Vektors v funktioniert, weil ich bereits versucht habe, den Vektor auf dem Bildschirm anzuzeigen, und es funktioniert gut. Vielen Dank im Voraus für die Hilfe!
Haben Sie versucht, den Code einzustufen? –
Yup, ich habe versucht zu debuggen und zu entfernen und zu analysieren Zeile für Zeile, aber aus irgendeinem seltsamen Grund bekomme ich diesen fatalen Absturz beim Versuch, den Code auszuführen, gebe ich keine Kompilierung Fehler, weil der Code tatsächlich erfolgreich kompiliert wurde: S –