1

整数値を含むベクトルのベクトルのサイズを変更する方法。

std::vector<std::vecotr<int>> MyVector;
int value = 10;

//need to insert values as 2 rows and 3 columns, like
//Myvector[0][0] = value;
//Myvector[0][1] = value;
//Myvector[0][2] = value;
//Myvector[1][0] = value;
//Myvector[1][1] = value;
//Myvector[1][2] = value;

// ......
//here i have to resize the vector size to 4 rows and 5 cols using resize() function.

MyVector.resize(.......); //Hoe is this possible.

最初の問題は、値を2行3列として挿入する必要があることです。push_backこの目的で関数を使用するにはどうすればよいですか。その後、指定されたサイズにサイズ変更する必要があります。それはベクトルのベクトルなので、私はこれについて心配しています。

4

4 に答える 4

4

ベクトルのベクトルは、メンバーベクトルが「行」である行列と考えることができます。

int main()
{
    std::vector<std::vector<int> > MyVector;
    //Create a row:
    std::vector<int> subVector;
    subVector.push_back(1);
    subVector.push_back(2);
    //put the row into the vector:
    MyVector.push_back(subVector);
    //create another row:
    subVector.clear();
    subVector.push_back(3);
    subVector.push_back(4);
    //put the second row into the vector
    MyVector.push_back(subVector);
    //access the first row and add an element to it:
    MyVector[0].push_back(6);
    //access the second row and add an element to it:
    MyVector[1].push_back(6);
}
于 2012-07-16T06:01:31.300 に答える
3

ベクトルを初期化して、それぞれ1行を表す2つのベクトルを含めることができます。これらのそれぞれは、列を表す3つの要素を含むように初期化できます。

std::vector<std::vecotr<int>> MyVector(2, std::vector<int>(3));

次に、新しい行を押し戻すことでサイズを変更できます。

// add a row
MyVector.push_back(std::vector<int>(3));

列を追加するには、各行にpush_backを実行できます。これは、ヘルパー関数を使用するとより適切に実現されます。

void appendColumn(std::vector<int> v);

これはすべてラッパークラスを作成することでより適切に管理できると思います。そのため、すべてのベクトルの次元がすべてNxM行列と一致していることを簡単に確認できます。

于 2012-07-16T05:56:15.573 に答える
0

MyVectorラッパークラスを作成できます。独自のサイズ変更操作を定義できます。この場合、ベクトルにアクセスするときに列のサイズをゆっくりと変更するように定義しました。vectorvector

struct MyVector {
  std::vector< std::vector<int> > vec_;
  size_t cols_;
  struct MySubVector {
    const MyVector &outer_;
    std::vector<int> &vec_;
    MySubVector (MyVector &outer, std::vector<int> &vec)
      : outer_(outer), vec_(vec) {}
    int & operator [] (int i) const {
      vec_.resize(outer_.cols_);
      return vec_[i];
    }
  };
  MySubVector operator [] (int i) {
    return MySubVector(*this, vec_[i]);
  }
  void resize (size_t rows, size_t cols) {
    vec_.resize(rows);
    cols_ = cols;
  }
};

サイズ変更時に特定の値を設定する場合resizeは、各行を繰り返してサイズ変更操作を呼び出し、初期化子を設定する必要があります。

struct resize_cols {
  size_t cols;
  int val;
  resize_cols (size_t c, int v) : cols(c), val(v) {}
  void operator () (std::vector<int> &vec) const {
    vec.resize(cols, val);
  }
};

void resize (size_t rows, size_t cols, int v) {
  vec_.resize(rows);
  std::for_each(vec_.begin(), vec_.end(), resize_cols(cols, v));
}
于 2012-07-16T06:29:37.047 に答える
0

この場合、resize外側のベクトルで関数を使用するだけです。

MyVector.resize( 2, std::vector<int>( 3, value ) );

より一般的には、既存の値を変更せずにサイズを変更する場合は、ループする必要があります。

于 2012-07-16T08:12:38.697 に答える