Ответ 1
С новым стандартом С++ (может потребоваться, чтобы в вашем компиляторе были включены специальные флаги), вы можете просто:
std::vector<int> v { 34,23 };
// or
// std::vector<int> v = { 34,23 };
Или даже:
std::vector<int> v(2);
v = { 34,23 };
В компиляторах, которые не поддерживают эту функцию (списки инициализаторов), вы можете эмулировать это с помощью массива:
int vv[2] = { 12,43 };
std::vector<int> v(&vv[0], &vv[0]+2);
Или, для случая назначения существующему вектору:
int vv[2] = { 12,43 };
v.assign(&vv[0], &vv[0]+2);
Как предположил Джеймс Канзе, он более надежный, чтобы иметь функции, которые дают вам начало и конец массива:
template <typename T, size_t N>
T* begin(T(&arr)[N]) { return &arr[0]; }
template <typename T, size_t N>
T* end(T(&arr)[N]) { return &arr[0]+N; }
И тогда вы можете сделать это, не повторяя размер на всем протяжении:
int vv[] = { 12,43 };
std::vector<int> v(begin(vv), end(vv));