3

まず、これが非常に単純で明白な質問である場合は、お詫び申し上げます。ノウハウを持っている人にとってはかなり簡単なことだと思います。C++11 では、ベクトルをリスト形式で初期化できます。

std::vector<std::string> v = {
    "this is a",
    "list of strings",
    "which are going",
    "to be stored",
    "in a vector"};

しかし、これは古いバージョンでは利用できません。私は文字列のベクトルを設定する最良の方法を考えようとしてきましたが、これまでのところ、実際に思いつくことができるのは次のとおりです。

std::string s1("this is a");
std::string s2("list of strings");
std::string s3("which are going");
std::string s4("to be stored");
std::string s5("in a vector");

std::vector<std::string> v;
v.push_back(s1);
v.push_back(s2);
v.push_back(s3);
v.push_back(s4);
v.push_back(s5);

それは機能しますが、書くのは少し面倒です。もっと良い方法があると確信しています。

4

3 に答える 3

6

標準的な方法は、適切なヘッダーでbegin()と関数を定義し、次のようなものを使用することです。end()

char const* array[] = {
    "this is a",
    "list of strings",
    "which are going",
    "to be stored",
    "in a vector"
};
std::vector<std::string> vec(begin(array), end(array));

関数begin()end()は次のように定義されます。

template <typename T, int Size>
T* begin(T (&array)[Size]) {
    return array;
}
template <typename T, int Size>
T* end(T (&array)[Size]) {
    return array + Size;
}
于 2013-09-30T22:24:18.550 に答える