c++ 中的类 Java Arrays.asList()
Posted
技术标签:
【中文标题】c++ 中的类 Java Arrays.asList()【英文标题】:Java-like Arrays.asList() in c++ 【发布时间】:2013-04-08 18:03:51 【问题描述】:C++ 是否支持 STL 或是否存在支持 Arrays.asList() 的外部库?
典型用法
private ArrayList<String> lexeme = new ArrayList<String>(Arrays.asList(" ", ",", "(", ")", ";", "=", ".", "*", "-"));
我正在使用 Visual Studio 11 (2012),但他们没有包含 c++11 功能Initializer lists
,这让我在初始化一个包含九个唯一字符串的向量时感到困惑,而没有
std::vector<std::string>::push_back("a");
std::vector<std::string>::push_back("b");
std::vector<std::string>::push_back("c");
. . .
【问题讨论】:
我相信这和你的问题很接近:***.com/questions/7050485/… 【参考方案1】:在C++11之前的一个常见做法是先创建一个数组,然后用它初始化向量,例如:
char const * arr[] = " ", ",", "(", ")", ";", "=", ".", "*", "-" ;
std::vector<std::string> str_vec(arr, arr + sizeof(arr) / sizeof(*arr));
当然,VS11 确实支持部分 C++11,所以你可以这样做,这样可读性会稍微好一点:
char const * arr[] = " ", ",", "(", ")", ";", "=", ".", "*", "-" ;
std::vector<std::string> str_vec(std::begin(arr), std::end(arr));
【讨论】:
【参考方案2】:你可以使用:
const char* arr[] = "a", "bc", "def";
std::vector<std::string> vec(std::begin(arr), std::end(arr));
如果您的编译器不支持std::begin()
和std::end()
,则很容易没有它们:
std::vector<std::string> vec(arr, arr + sizeof(arr) / sizeof(*arr));
【讨论】:
以上是关于c++ 中的类 Java Arrays.asList()的主要内容,如果未能解决你的问题,请参考以下文章