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

时间:2012-06-15 03:44:37

标签: c++ stdvector

我的代码有问题吗?

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

8 个答案:

答案 0 :(得分:29)

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

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

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

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

但是,如果您使用std::vectorstd::array,可能会更好。

答案 1 :(得分:4)

你不能这么做。

你最好使用以下任何一个:

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

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

  3. 你可以声明一个结构(比方说S),其中包含int类型的数组,即

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

  4. 所以间接地,你将数组推入向量。

答案 2 :(得分:4)

数组不是可复制的,因此您无法将它们存储在容器中(在本例中为vector)。您可以存储嵌套的vector或C ++ 11 std::array

答案 3 :(得分:4)

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

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

希望这有助于某人。

答案 4 :(得分:0)

只需使用

vector<int*>  .That will definitely work.

关于同一主题的相关讨论:Pushing an array into a vector

答案 5 :(得分:0)

您应该使用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});

答案 6 :(得分:0)

一种可能的解决方案是:

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

答案 7 :(得分:-2)

要实例化向量,需要提供一个类型,但是int [2]不是一个类型,它是一个声明。