C ++, с вектором & lt; int [2] & gt; я могу нажать push_back ({someNum1, someNum2})?

У меня есть вектор:

vector<int[2]> storeInventory; //storeInventory[INDEX#]{ITEMNUM, QUANTITY}

и я хочу использовать push_back() метод добавления новых массивов к вектору инвентаря. Что-то похожее на это:

const int ORANGE = 100001;
const int GRAPE = 100002

storeInventory.push_back({GRAPE,24});
storeInventory.push_back{ORANGE, 30};

Тем не менее, когда я пытаюсь использовать синтаксис, как у меня выше, я получаю ошибку Error: excpeted an expression, То, что я пытаюсь, просто невозможно, или я просто поступаю неправильно?

4

Решение

Встроенные массивы не Назначаемые или же CopyConstructible. Это нарушает требования к элементам контейнера (по крайней мере, для C ++ 03 и более ранних). Другими словами, вы не можете иметь std::vector из int[2] элементы. Вы должны обернуть ваш тип массива, чтобы удовлетворить вышеуказанные требования.

Как уже было предложено, std::array в идеальный кандидат для типа оболочки в C ++ 11. Или вы можете просто сделать

struct Int2 {
int a[2];
};

и использовать std::vector<Int2>,

5

Другие решения

Если это только вектор типа int [2], вы можете использовать:

std::vector<std::pair<int, int>> vec

Добавление элементов:

int a, b;
vec.push_back(std::make_pair(a, b));
3

storeInventory.push_back({GRAPE, 24});
storeInventory.push_back({ORANGE, 30});

Вы можете попробовать это. Я думаю, что вы забыли скобки.

2

Я не верю, что можно передавать такие массивы. Рассмотреть возможность использования std::array вместо:

vector<std::array<int, 2> > storeInventory;
storeInventory.push_back({{GRAPE,24}});
2

Массивы в стиле C не подлежат копированию, поэтому их нельзя использовать в качестве типа элемента в std::vector,

1

Просто используйте std::vector<int *> 🙂

0
По вопросам рекламы [email protected]