我希望使用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 );
但这仍然感觉有点“不雅”。
答案 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::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);