it-swarm.com.de

Initialisieren eines Vektors von Vektoren mit fester Größe mit Boost-Zuweisung

Einen Vektor mit fester Größe haben, 

vector<vector<int> > v(10);

Ich möchte es so initialisieren, dass es in allen Elementen einen eindimensionalen Vektor mit initialisiertem Wert hat (zum Beispiel 1).

Ich habe Boost Assign wie folgt verwendet 

v= repeat(10,list_of(list_of(1)));

und ich habe einen Kompilierungsfehler

error: no matching function for call to ‘repeat(boost::assign_detail::generic_list<int>)’

Könnten Sie mir bitte sagen, wie ich das machen soll ... Vielen Dank im Voraus

31
saloua

Dies verwendet boost::assign nicht, macht aber das, was Sie brauchen:

vector<vector<int>> v(10, vector<int>(10,1));

Dies erzeugt einen Vektor, der 10 Vektoren von int enthält, von denen jeder 10 ints enthält.

52
juanchopanza

Sie müssen nicht boost für das erforderliche Verhalten verwenden. Im Folgenden wird eine vector von 10vector<int>s erstellt, wobei jeder vector<int>10ints mit dem Wert 1 enthält:

std::vector<std::vector<int>> v(10, std::vector<int>(10, 1));
28
hmjd

Ich werde einfach versuchen, es denjenigen zu erklären, die neu in C++ sind. Ein Vektor der Variablen mat hat den Vorteil, dass Sie mit dem Operator [] fast ohne Aufpreis direkt auf seine Elemente zugreifen können. 

int n(5), m(8);
vector<vector<int> > mat(n, vector<int>(m));

mat[0][0] =4; //direct assignment OR

for (int i=0;i<n;++i)
    for(int j=0;j<m;++j){
        mat[i][j] = Rand() % 10;
    }

Natürlich ist das nicht der einzige Weg. Wenn Sie keine Elemente hinzufügen oder entfernen, können Sie auch die systemeigenen Container mat[] verwenden, bei denen es sich nicht um Zeiger handelt. Hier ist meine Lieblingsmethode mit C++:

int n(5), m(8);
int *matrix[n];
for(int i=0;i<n;++i){
    matrix[i] = new int[m]; //allocating m elements of memory 
    for(int j=0;j<m;++j) matrix[i][j]= Rand()%10;
}

Auf diese Weise müssen Sie #include <vector> nicht verwenden. Hoffentlich ist es klarer!

4
moldovean
#include <vector>
#include <iostream>
using namespace std;


int main(){
    int n; cin >> n;
    vector<vector<int>> v(n);
    //populate
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            int number; cin >> number;
            v[i].Push_back(number);
        }
    }
    // display
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            cout << v[i][j] << " ";
        }
        cout << endl;
    }
}

Eingang:

4
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44

Ausgabe:

11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
0
Frank Hou