[英]Convert array<String^>^ to std::vector<std::string>
[英]Initialising a vector of std::string with an array
我希望使用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 );
但这仍然感觉有点“不优雅”。
那么不需要中间步骤:
std::string str[] = { "one", "two", "three", "four" };
vector< std::string > vec( str, str + ( sizeof ( str ) / sizeof ( std::string ) ) );
在C ++ 11中,您可以使用初始化列表构造函数将大括号初始化放在构造函数中。
在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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.