3

「行」または 1D ベクトルの値を定義してから、その行を 2D ベクトルに push_back しようとしています。エラーをスローしないだけでなく、機能していないように見えるいくつかの異なることを試しました。以下のコード:

#include <vector>
#include <iostream>
using std::vector;

#define HEIGHT 5
#define WIDTH 3

// 2D VECTOR ARRAY EXAMPLE

int main() {
vector<vector<double> > array2D;
vector<double> currentRow;

// Set up sizes. (HEIGHT x WIDTH)
// 2D resize
array2D.resize(HEIGHT);
for (int i = 0; i < HEIGHT; ++i)
{
  array2D[i].resize(WIDTH);
}
// Try putting some values in
array2D[1][2] = 6.0; // this works
array2D[2].push_back(45); // this value doesn't appear in vector output.  Why?

// 1D resize
currentRow.resize(3);

// Insert values into row
currentRow[0] = 1;
currentRow[1] = 12.76;
currentRow[2] = 3;

// Push row into 2D array
array2D.push_back(currentRow); // this row doesn't appear in value output.  Why?

// Output all values
for (int i = 0; i < HEIGHT; ++i)
{ 
  for (int j = 0; j < WIDTH; ++j)
    {  
        std::cout << array2D[i][j] << '\t';
  }
  std::cout << std::endl;
 }
 return 0;
}
4

3 に答える 3

7

currentRow を push_back するまでに、array2D にはすでに HEIGHT 行が含まれており、push_back 後は HEIGHT+1 行が含まれます。最後に追加したものは表示せず、最初の HEIGHT 行のみを表示します。

于 2012-03-01T18:47:04.997 に答える
3

push_back()ベクターの末尾にアイテムを追加します。ベクトルにWIDTH項目が含まれている場合、.WIDTH+1の後に項目が含まれますpush_back()

ベクトルの内容を印刷するWIDTH場合、ベクトルにさらに多くの項目が含まれている場合でも、最初の項目のみが印刷されるため、追加の項目は表示されません。

メソッドを使用して、ベクトル内にいくつのアイテムがあるかを調べることができますsize()

于 2012-03-01T18:47:46.030 に答える
1

代わりにメソッドresizeを実際に使用したいときに使用しています。reserveリサイズはベクトルの内容を変更しますが、リザーブはストレージ容量を変更するだけです。したがって、ベクトルのサイズを N 要素に変更してからいくつかの要素をプッシュすると、N、N + 1 などの位置にプッシュされますが、N 要素のサイズを確保するだけでは、位置 0、1 にプッシュされます。など、あなたが望むようです。

于 2012-03-01T18:46:50.573 に答える