使用数组初始化std :: string的向量

时间:2012-01-26 14:09:10

标签: c++ stl

我希望使用std::string s。

数组初始化一个向量

我有以下解决方案,但想知道是否有更优雅的方式来做到这一点?

std::string str[] = { "one", "two", "three", "four" };
vector< std::string > vec;
vec = vector< std::string >( str, str + ( sizeof ( str ) /  sizeof ( std::string ) ) );

当然,我可以通过如下定义大小来使其更具可读性:

int size =  ( sizeof ( str ) /  sizeof ( std::string ) );

并将矢量初始化替换为:

vec = vector< std::string >( str, str + size );

但这仍然感觉有点“不雅”。

2 个答案:

答案 0 :(得分:4)

不需要中间步骤:

std::string str[] = { "one", "two", "three", "four" };
vector< std::string > vec( str, str + ( sizeof ( str ) /  sizeof ( std::string ) ) );

在C ++ 11中,您可以使用初始化列表构造函数将大括号初始化放在构造函数中。

答案 1 :(得分:3)

在C ++ 11中,我们有std::beginstd::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中,您可以使用模板来推断数组的大小,以实现自己的beginend,或直接初始化数组:

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);