C++ 使用数组初始化std::string的向量
我希望使用C++ 使用数组初始化std::string的向量,c++,stl,C++,Stl,我希望使用std::strings数组初始化向量 我有下面的解决方案,但不知道是否有更优雅的方法来实现这一点 std::string str[] = { "one", "two", "three", "four" }; vector< std::string > vec; vec = vector< std::string >( str, str + ( sizeof ( str ) / sizeof ( std::string ) ) ); 并将向量初始化替换为:
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 ) ) );
并将向量初始化替换为:
vec = vector< std::string >( str, str + size );
vec=vector(str,str+size);
但这仍然感觉有点“不雅”。不需要中间步骤:
std::string str[] = { "one", "two", "three", "four" };
vector< std::string > vec( str, str + ( sizeof ( str ) / sizeof ( std::string ) ) );
std::string str[]={“一”、“二”、“三”、“四”};
向量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));
请看,谢谢,我不确定我是否完全错过了任何其他可能的初始化方法。在C++11中,我们有适当的初始化器,不需要使用您的第一个方法。@KonradRudolph:好的观点(虽然这个问题确实特别问到从数组初始化,所以我将在回答中保留该方法).早在C++11之前,我们的个人工具包中就有了
begin
和end
。它们主要与C++11之前的版本相关。谢谢。它不太适合我目前正在编写的代码,但很高兴知道这一点。我还应该声明我没有使用C++11,但再次感谢您的帮助!
#include <iterator>
std::vector<std::string> vec(std::begin(str), std::end(str));
std::vector<std::string> vec {"one", "two", "three", "four"};
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);