45

固定サイズのベクトルのベクトルを持ち、

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>)’

その方法を教えてください。前もって感謝します

4

4 に答える 4

88

これは使用しませんboost::assignが、必要なことを行います:

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

intこれにより、それぞれが 10 を含む の 10 個のベクトルを含むベクトルが作成されますints

于 2012-10-29T12:20:37.957 に答える
48

必要な動作に使用する必要はありませんboost。以下は の を作成し、vectorそれぞれ10 vector<int>がの値を持つvector<int> を含みます:10 int1

std::vector<std::vector<int>> v(10, std::vector<int>(10, 1));
于 2012-10-29T12:19:25.500 に答える
6

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>。うまくいけば、それはより明確です!

于 2015-03-30T21:14:18.250 に答える
0
#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
于 2017-06-30T05:12:28.070 に答える