В C ++ 11 у нас есть std::begin
и std::end
, которые работают как для контейнеров в стиле STL, так и для встроенных массивов:
#include <iterator>
std::vector<std::string> vec(std::begin(str), std::end(str));
, хотя, как упоминалось в комментариях,Обычно вам вообще не нужен промежуточный массив:
std::vector<std::string> vec {"one", "two", "three", "four"};
В C ++ 03 вы можете использовать шаблон для определения размера массива, либо для реализации собственных begin
и end
, или для инициализации массива напрямую:
template <typename T, size_t N>
std::vector<T> make_vector(T &(array)[N]) {
return std::vector<T>(array, array+N);
}
std::vector<std::string> vec = make_vector(str);