У меня есть вектор:
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
, То, что я пытаюсь, просто невозможно, или я просто поступаю неправильно?
Встроенные массивы не Назначаемые или же CopyConstructible. Это нарушает требования к элементам контейнера (по крайней мере, для C ++ 03 и более ранних). Другими словами, вы не можете иметь std::vector
из int[2]
элементы. Вы должны обернуть ваш тип массива, чтобы удовлетворить вышеуказанные требования.
Как уже было предложено, std::array
в идеальный кандидат для типа оболочки в C ++ 11. Или вы можете просто сделать
struct Int2 {
int a[2];
};
и использовать std::vector<Int2>
,
Если это только вектор типа int [2], вы можете использовать:
std::vector<std::pair<int, int>> vec
Добавление элементов:
int a, b;
vec.push_back(std::make_pair(a, b));
storeInventory.push_back({GRAPE, 24});
storeInventory.push_back({ORANGE, 30});
Вы можете попробовать это. Я думаю, что вы забыли скобки.
Я не верю, что можно передавать такие массивы. Рассмотреть возможность использования std::array
вместо:
vector<std::array<int, 2> > storeInventory;
storeInventory.push_back({{GRAPE,24}});
Массивы в стиле C не подлежат копированию, поэтому их нельзя использовать в качестве типа элемента в std::vector
,
Просто используйте std::vector<int *>
🙂