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()的主要内容,如果未能解决你的问题,请参考以下文章

c++ 中的类 Java Arrays.asList()

c++ 中是不是有类似 java 中的 Desktop 类的类? (特定于 Windows)

list,set,map,数组之间的相互转换详细解析

C++ 静态方法(在不同的类中)(如 Java 的)

将带有字符串索引的运行数字添加到 Spark 中的数据框?

C++中有专门给对象数组排序的类方法吗,就像Java中的sort