web-dev-qa-db-ja.com

intの配列をC ++ベクトルにプッシュできますか?

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

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*&)’
16
WoooHaaaa

配列を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を使用した方がよいでしょう。

30
Jesse Good

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

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

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

5
Dignesh P R

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

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

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

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

  3. その中にint型の配列を持つ構造体(Sなど)を宣言できます。

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

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

4
vijay

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

4
Mark B

使うだけ

vector<int*>  .That will definitely work.

同じトピックに関する関連ディスカッション: 配列をベクトルにプッシュする

0
Arvind

単純な配列の代わりに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});
0
Alexey Samoylov

1つの可能な解決策は次のとおりです。

    std::vector<int*> weights;
    int* weight = new int[2];
    weight[0] =1; weight[1] =2;
    weights.Push_back(weight);
0
jalsh