2017-04-13 7 views
-1

Ich versuche, einem mehrdimensionalen Vektor Werte zuzuweisen, aber ich erhalte immer einen Fehler "R6010 - abort()" von Visual Studio.Werte dem multidimensionalen Vektor zuweisen

Was ich will ist ein zweidimensionaler Vektor, wo die zweite Dimension genau so groß ist wie nötig. (Wichtig, weil ich jetzt nicht, wie viele Eingangswerte und ich es später myvector.at(i).size();

So zu formulieren verwenden möchten kurz: Warum wird das folgende Beispiel funktioniert nicht

#include "stdafx.h" 
#include <iostream> 
#include <vector> 

using namespace std; 


int main() 
{ 

vector < vector <int> > Vektor; 
Vektor.resize(10); 
int tmp; 

while (true) { 
    cout << "Please enter a value: " << endl; 
    cin >> tmp; 
    int size; 

    if (tmp > 0 & tmp < 11) { 
     Vektor.at(tmp - 1).push_back(tmp); 
    } 

    for (int i = 1; i < 11; i++) { 
     size = Vektor.at(i).size(); 
     for (int j = 0; j < size; j++) { 
      cout << "Value at " << i << " , " << j << " : " << Vektor.at(i).at(j) << endl; 
     } 
    } 
} 

return 0; 

}

+0

sein könnte Es sollte Ihnen sagen, wo dieser Fehler aufgetreten ist. In jedem Fall sollten Sie einen Debugger verwenden. –

Antwort

1

Sie verwendet falschen Indizes in den Zeilen:

for (int i = 1; i < 11; i++) { 
    size = Vektor.at(i).size(); 

ändern Sie die Zeilen:

   |  || 
      v  vv 
for (int i = 0; i < 10; i++) { 
    size = Vektor.at(i).size(); 
0

Wie bereits von @RSahu beantwortet, verwenden Sie falsche Indizes in einer Schleife. Anstatt die Werte zu korrigieren, schlage ich vor, dass Sie hartcodierte Werte vermeiden.

Das kann auf verschiedene Arten erfolgen. Durch die Verwendung von vector.size() ist Ihr Code einfach zu reparieren. Verwenden Sie einfach diese beiden Zeilen anstelle der aktuellen zwei Linien:

if (tmp > 0 & tmp <= Vektor.size()) { 

for (int i = 0; i < Vektor.size() ; i++) { 

Eine alternative Art und Weise des Druckens

size_t i = 0; 
for (const auto& v : Vektor) 
{ 
    size_t j = 0; 
    for (const auto e : v) 
    { 
     cout << "Value at " << i << " , " << j << " : " << e << endl; 
     ++j; 
    } 
    ++i; 
} 
Verwandte Themen