3

ポインタ(*vectorName)を2Dベクトル366x4で初期化しようとしています。

両方

vector<int> *vectorName = new vector<int>(366, new vector<int>(4));

vector<int> *vectorName = new vector<int>(366, vector<int>(4));

動作せず、エラーが発生します

エラー:コンストラクター "std :: vector、<_Ty、_Alloc> :: vector [with_ty = int、_Alloc = std_allocator]"のインスタンスがありません引数タイプは(const int、std :: vector> *)です

私に何ができる?

これはmain関数内で発生しています。

4

3 に答える 3

4
vector<int> *vectorName = new vector<int>(366, vector<int>(4));

ベクトル コンストラクターテンプレート(いくつかのことを無視します) が次のように見えるため、上記は機能しません。

vector <TYPE> (SIZE, variable of type TYPE);

ではvector<int>(366, vector<int>(4))vector <int> (4)はタイプではありませんint

サイズ 4 の でvectorある 366 要素でを作成するにはvector、次のようにします。int

vector<vector<int> > *vectorName = new vector<vector<int> >(366, vector<int>(4));

または、ポインターが必要ない場合: (おそらく必要ないでしょう)

vector<vector<int> > vectorName(366, vector<int>(4));

補足として、固定サイズの 2D の場合、配列だけでなくvector、なぜ を使用しているのですか。vectorこれははるかに簡単です:

int arr[366][4];
于 2013-02-19T14:26:34.437 に答える
2

ベクトルの動的 C 配列を取得するために、ベクトルへのポインタを使用しようとしていると思います。そうする理由はありません。代わりにベクトルのベクトルを使用できます。

vector< vector<int> >

次のように初期化できます。

vector< vector<int> > vec(4);

for (size_t i = 0; i < 4; ++i) {
    vec[i].resize(366);
}

使用例:

vec[3][365] = 3;

ただし、そのようなベクトルへのポインターが本当に必要な場合:

vector< vector<int> >* vec = new vector< vector<int> >(4);

for (size_t i = 0; i < 4; ++i) {
    (*vec)[i].resize(366);
}

(*vec)[3][365] = 3;

サイズが一定で、C++11 コンパイラを使用している場合は、より簡単な方法を使用できますstd::array

array<array<int, 366>, 4> arr;

// Usage example
arr[3][365] = 3;

または、動的に割り当てられたものへのポインター:

array<array<int, 366>, 4>* arr = new array<array<int, 366>, 4>;

// Usage example
(*arr)[3][365] = 3;
于 2013-02-19T14:49:31.773 に答える
0

これをやろうとしていますか?これにより、int を持つベクトルの 2D ベクトルが作成されます。サイズが 4 のベクトルで 366 個のベクトルを作成し、すべての項目がゼロに初期化されます。これで、366 x 4 の 2D ベクトルができました。

vector<vector<int> > twod( 366, vector<int>(4,0));

そして、このベクトルへのポインターが必要な場合:

vector<vector<int> >* twodptr = &twod;

あなたが本当にこれを必要とするなら。

于 2013-02-19T14:49:54.957 に答える