Take the 2-minute tour ×

I have the vector:

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

and I am wanting to use the push_back() method to add new arrays to the inventory vector. Something similar to this:

const int ORANGE = 100001;
const int GRAPE = 100002

storeInventory.push_back{ORANGE, 30};

However, when I try using the syntax as I have above I get the error Error: excpeted an expression. Is what I am trying just not possible, or am I just going about it the wrong way?

share|improve this question
use std::pair instead of the array or use std::map –  stefan Nov 30 '12 at 19:26
add comment

5 Answers

up vote 4 down vote accepted

Built-in arrays are not Assignable or CopyConstructible. This violates container element requirements (at least for C++03 and earlier). In other words, you can't have std::vector of int[2] elements. You have to wrap your array type to satisfy the above requirements.

As it has already been suggested, std::array in a perfect candidate for a wrapper type in C++11. Or you can just do

struct Int2 {
  int a[2];

and use std::vector<Int2>.

share|improve this answer
Technically, I think vector<int[2]> storeInventory; is valid in C++11 with the new fine-grained container requirements. The value type needs only be destructible, which an array type is. push_back requires that the value type is copy insertable, which an array type is not. A container of an array type is not very usable (or useful), and using a wrapper structure (like std::array<T, N>) would be advisable. –  James McNellis Nov 30 '12 at 19:37
add comment
storeInventory.push_back({GRAPE, 24});
storeInventory.push_back({ORANGE, 30}); 

You can try this. I think you forgot parentheses.

share|improve this answer
Unfortunately this doesn't work, which is why I am asking this question. –  Brook Julias Nov 30 '12 at 22:02
add comment

I don't believe it's possible to pass arrays like that. Consider using std::array instead:

vector<std::array<int, 2> > storeInventory; 
share|improve this answer
add comment

C-style arrays are not copyable, so can't be used as the element type in a std::vector.

share|improve this answer
add comment

If it's only vector of int[2] you could use:


Adding elements:

int a, b;
vec.push_back(std::make_pair(a, b));
share|improve this answer
add comment

Your Answer


