固定サイズのベクトルのベクトルを持つ、
vector<vector<int> > v(10);
すべての要素に、初期化された値(1など)を持つ1次元ベクトルが含まれるように初期化します。
Boost Assignを次のように使用しました
v= repeat(10,list_of(list_of(1)));
コンパイルエラーが発生しました
error: no matching function for call to ‘repeat(boost::assign_detail::generic_list<int>)’
その方法を教えてください。前もって感謝します
これはboost::assign
を使用しませんが、必要なことは行います:
vector<vector<int>> v(10, vector<int>(10,1));
これにより、int
の10個のベクトルを含むベクトルが作成され、各ベクトルには10個のints
が含まれます。
必要な動作にboost
を使用する必要はありません。以下は、10
vector<int>
のvector
を作成し、各vector<int>
には10
の値を持つ1
int
sが含まれます。
std::vector<std::vector<int>> v(10, std::vector<int>(10, 1));
C++を初めて使用する人に説明するだけです。ベクトルのmat
には、[]
演算子を使用してほとんどコストをかけずに要素に直接アクセスできるという利点があります。
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;
}
もちろん、これが唯一の方法ではありません。また、要素を追加または削除しない場合は、ポインタ以外のネイティブコンテナmat[]
を使用することもできます。 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;
}
この方法では、#include <vector>
を使用する必要はありません。うまくいけば、より明確になります!
#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;
}
}
入力:
4
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
出力:
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44