私のコードに問題はありますか?
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*&)’
配列を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
。
あなたはそれを単純に行うことはできません。
次のいずれかを使用することをお勧めします。
vector <vector<int>>
(これは基本的に2次元のベクトルです。あなたの場合は機能するはずです)
vector< string >
(文字列は文字の配列であるため、後で型キャストする必要があります。簡単にできます。)
int
型の配列を含む構造体(たとえばS)を宣言できます。
struct S{int a[num]}
、次にのベクトルを宣言します
vector< S>
したがって、間接的に、配列をベクトルにプッシュしています。
このように配列をコンテナに追加することもできます。
int arr[] = {16,2,77,29};
std::vector<int> myvec (arr, arr + sizeof(arr) / sizeof(int) );
これが誰かを助けることを願っています。
vector
配列はコピー構築可能ではないため、コンテナー(この場合)に格納することはできません。ネストされたvector
、またはC++11に保存できstd::array
ます。
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});
考えられる解決策の1つは次のとおりです。
std::vector<int*> weights;
int* weight = new int[2];
weight[0] =1; weight[1] =2;
weights.push_back(weight);
次のような状況:
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);
ベクトルをインスタンス化するには、型を指定する必要がありますが、int [2]は型ではなく、宣言です。