19

私のコードに問題はありますか?

std::vector<int[2]> weights;
int weight[2] = {1,2};
weights.push_back(weight);

コンパイルできません。理由を説明してください。

no matching function for call to ‘std::vector<int [2], std::allocator<int [2]> >::push_back(int*&)’
4

9 に答える 9

35

配列をSTLコンテナーで使用できない理由は、型がコピー構成可能で割り当て可能である必要があるためです(c ++ 11では構成可能に移動することもできます)。たとえば、配列では次のことはできません。

int a[10];
int b[10];
a = b; // Will not work!

アレイは要件を満たしていないため、使用できません。ただし、本当に配列を使用する必要がある場合(おそらくそうではない場合)、次のようにクラスのメンバーとして配列を追加できます。

struct A { int weight[2];};
std::vector<A> v;

std::vectorただし、またはを使用した方がよいでしょうstd::array

于 2012-06-15T04:16:44.653 に答える
4

あなたはそれを単純に行うことはできません。

次のいずれかを使用することをお勧めします。

  1. vector <vector<int>>(これは基本的に2次元のベクトルです。あなたの場合は機能するはずです)

  2. vector< string >(文字列は文字の配列であるため、後で型キャストする必要があります。簡単にできます。)

  3. int 型の配列を含む構造体(たとえばS)を宣言できます。

    struct S{int a[num]}、次にのベクトルを宣言します vector< S>

したがって、間接的に、配列をベクトルにプッシュしています。

于 2012-06-15T03:54:33.417 に答える
4

このように配列をコンテナに追加することもできます。

    int arr[] = {16,2,77,29};
    std::vector<int> myvec (arr, arr + sizeof(arr) / sizeof(int) );

これが誰かを助けることを願っています。

于 2015-12-26T18:21:27.813 に答える
3

vector配列はコピー構築可能ではないため、コンテナー(この場合)に格納することはできません。ネストされたvector、またはC++11に保存できstd::arrayます。

于 2012-06-15T04:11:50.573 に答える
2

std::array単純な配列の代わりに使用する必要があります。

#include <vector>
#include <array>

std::vector<std::array<int, 2>> weights;
std::array<int, 2> weight = {1, 2};
weights.push_back(weight);

またはコンストラクターを使用:

std::vector<std::array<int, 2>> weights;
weights.push_back(std::array<int, 2> ({1, 2});
于 2019-12-15T20:55:52.877 に答える
2

考えられる解決策の1つは次のとおりです。

    std::vector<int*> weights;
    int* weight = new int[2];
    weight[0] =1; weight[1] =2;
    weights.push_back(weight);
于 2020-01-29T15:28:26.580 に答える
0

使用するだけ

vector<int*>  .That will definitely work.

同じトピックに関する関連する議論:配列をベクトルにプッシュする

于 2012-06-15T03:56:08.910 に答える
0

次のような状況:

int arr[3] = { 1, 2, 3 };
std::vector<int[]> v;
v.push_back(arr);

「..を使用してベクトルの配列を初期化できません」というエラーでは機能しません。

これは、うまくいく可能性があります

int * arr = new int[3] { 1, 2, 3 };
std::vector<int*> v;
v.push_back(arr);
于 2021-08-16T10:57:15.107 に答える
-2

ベクトルをインスタンス化するには、型を指定する必要がありますが、int [2]は型ではなく、宣言です。

于 2012-06-15T04:16:59.490 に答える