Как инициализировать вектор в C++ [дубликат]
Возможные Дубликаты:
C++: Самый простой способ инициализации вектора STL с жестко закодированными элементами
Я хочу инициализировать вектор, как мы делаем в случае массива.
пример
int vv[2] = {12, 43};
но когда я делаю это, как это,
vector<int> v(2) = {34, 23};
или
vector<int> v(2);
v = {0, 9};
выдает ошибку:
ожидается первичное-выражение до ‘{’ токен
и
ошибка: ожидаемый‘, ’ или‘; ’ before ' = ' token
соответственно.
2 ответов:
С новым стандартом C++ (возможно, потребуется включить специальные флаги на вашем компиляторе) вы можете просто сделать:
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));
вы также можете сделать так:
template <typename T> class make_vector { public: typedef make_vector<T> my_type; my_type& operator<< (const T& val) { data_.push_back(val); return *this; } operator std::vector<T>() const { return data_; } private: std::vector<T> data_; };и использовать его так:
std::vector<int> v = make_vector<int>() << 1 << 2 << 3;
Comments