Могу ли я нажать массив int на вектор С++?

Есть ли какие-либо проблемы с моим кодом?

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

Ответы

Ответ 1

Массивы причин не могут использоваться в контейнерах STL, потому что для этого требуется, чтобы тип был конструктивным и назначаемым для копирования (также можно построить конструктивно в С++ 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.

Ответ 2

Вы не можете сделать это просто.

Лучше вы используете любой из них:

  • vector <vector<int>> (это в основном двумерный вектор. Он должен работать в вашем случае)

  • vector< string > (строка - это массив символов, поэтому вам требуется листинг типа позже. Это может быть легко.).

  • вы можете объявить структуру (например, S), имеющую массив типа int внутри него i.e.

    struct S{int a[num]}, тогда объявите вектор vector< S>

Так косвенно, вы нажимаете массив на вектор.

Ответ 3

Массивы не копируются, поэтому вы не можете хранить их в контейнерах (vector в этом случае). Вы можете сохранить вложенный vector или в С++ 11 a std::array.

Ответ 4

В контейнер также можно добавить массив.

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

Надеюсь, это поможет кому-то.

Ответ 6

Чтобы создать экземпляр вектора, вам нужно указать тип, но int [2] не является типом, это объявление.