コードに問題はありますか?
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!
配列は要件を満たさないため、使用できません。ただし、reallyで配列を使用する必要がある場合(おそらくそうではありません)、配列をクラスのメンバーとして追加できます。
struct A { int weight[2];};
std::vector<A> v;
ただし、std::vector
またはstd::array
を使用した方がよいでしょう。
このように配列をコンテナに追加することもできます。
int arr[] = {16,2,77,29};
std::vector<int> myvec (arr, arr + sizeof(arr) / sizeof(int) );
これが誰かを助けることを願っています。
単純にそれを行うことはできません。
次のいずれかを使用することをお勧めします。
vector <vector<int>>
(基本的には2次元のベクトルです。あなたのケースで機能するはずです)
vector< string >
(文字列は文字の配列なので、後で型キャストが必要になります。簡単にできます。).
その中にint
型の配列を持つ構造体(Sなど)を宣言できます。
struct S{int a[num]}
、次にvector< S>
のベクトルを宣言します
したがって、間接的に、配列をベクトルにプッシュしています。
配列はコピー構築可能ではないため、コンテナー(この場合は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);