我可以将int数组推送到C++向量吗?

MrR*_*ROY 15 c++ stdvector

我的代码有问题吗?

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

它无法编译,请帮助解释原因:

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

Jes*_*ood 29

数组不能在STL容器中使用的原因是因为它要求类型是可复制构造和可分配的(也可以在c ++ 11中移动构造).例如,您无法对数组执行以下操作:

int a[10];
int b[10];
a = b; // Will not work!
Run Code Online (Sandbox Code Playgroud)

由于数组不满足要求,因此无法使用它们.但是,如果您确实需要使用数组(可能不是这种情况),您可以将其添加为类的成员,如下所示:

struct A { int weight[2];};
std::vector<A> v;
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用std::vector或更好,它可能会更好std::array.


vij*_*jay 5

你不能简单地做到这一点。

最好使用以下任一方法:

  1. vector <vector<int>>(它基本上是一个二维向量。它应该适用于您的情况)

  2. vector< string >(字符串是一个字符数组,因此稍后需要进行类型转换。这很容易。)。

  3. 您可以声明一个结构(例如 S),int 其中包含类型数组,即

    struct S{int a[num]},然后声明向量 vector< S>

因此,间接地将数组推入向量中。


小智 5

数组也可以像这样添加到容器中。

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

希望这对某人有帮助。