1

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");
                 . . .
4

2 回答 2

3

在 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));
于 2013-04-08T18:11:32.863 回答
1

你可以使用:

const char* arr[] = {"a", "bc", "def"};
std::vector<std::string> vec(std::begin(arr), std::end(arr));

如果您的编译器不支持std::begin()and std::end(),它们很容易没有:

std::vector<std::string> vec(arr, arr + sizeof(arr) / sizeof(*arr));
于 2013-04-08T18:11:49.020 回答