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
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.
Sie müssen nicht boost
für das erforderliche Verhalten verwenden. Im Folgenden wird eine vector
von 10
vector<int>
s erstellt, wobei jeder vector<int>
10
int
s mit dem Wert 1
enthält:
std::vector<std::vector<int>> v(10, std::vector<int>(10, 1));
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!
#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