5

私はベクトルを持っています:

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

6 に答える 6

6

組み込み配列はAssignableまたはCopyConstructibleではありません。これは、コンテナー要素の要件に違反しています (少なくとも C++03 以前の場合)。std::vectorつまり、 ofint[2]要素を持つことはできません。上記の要件を満たすには、配列型をラップする必要があります。

すでに提案されているようにstd::array、C++11 のラッパー型の完全な候補です。または、あなたはただすることができます

struct Int2 {
  int a[2];
};

と使用しますstd::vector<Int2>

于 2012-11-30T19:32:08.243 に答える
3

int[2] のベクトルのみの場合は、次を使用できます。

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

要素の追加:

int a, b;
vec.push_back(std::make_pair(a, b));
于 2012-11-30T21:07:51.203 に答える
3

そのような配列を渡すことが可能だとは思いません。std::array代わりに使用することを検討してください:

vector<std::array<int, 2> > storeInventory; 
storeInventory.push_back({{GRAPE,24}});
于 2012-11-30T19:30:48.093 に答える
2
storeInventory.push_back({GRAPE, 24});
storeInventory.push_back({ORANGE, 30}); 

これを試すことができます。括弧を忘れたと思います。

于 2012-11-30T19:25:19.250 に答える
2

C スタイルの配列はコピーできないため、 a の要素型として使用できませんstd::vector

于 2012-11-30T19:32:53.080 に答える