Подтвердить что ты не робот

Инициализировать векторный массив строк

Можно ли инициализировать векторный массив строк.

например:

static std::vector<std::string> v;//объявлен как член класса

Я использовал static только для инициализации и заполнения его строками. Или я должен просто заполнить его в конструкторе, если он не может быть инициализирован, как и обычные массивы.

4b9b3361

Ответ 1

Сортировка:

class some_class {
    static std::vector<std::string> v; // declaration
};

const char *vinit[] = {"one", "two", "three"};

std::vector<std::string> some_class::v(vinit, end(vinit)); // definition

end заключается в том, что мне не нужно писать vinit+3 и обновлять его, если длина изменится позже. Определите его как:

template<typename T, size_t N>
T * end(T (&ra)[N]) {
    return ra + N;
}

Ответ 2

Если вы используете cpp11 (при необходимости используйте флажок -std=c++0x), вы можете просто инициализировать вектор следующим образом:

// static std::vector<std::string> v;
v = {"haha", "hehe"};

Ответ 4

MSVC 2010, поскольку он не поддерживает std::initializer_list<> для векторов, но поддерживает std::end

const char *args[] = {"hello", "world!"};
std::vector<std::string> v(args, std::end(args));

Ответ 5

так же, как @Moo-Juice:

const char* args[] = {"01", "02", "03", "04"};
std::vector<std::string> v(args, args + sizeof(args)/sizeof(args[0])); //get array size

Ответ 7

Это 2017 год, но этот поток является верхним в моей поисковой системе, сегодня предпочтительными являются следующие методы (списки инициализаторов)

std::vector<std::string> v = { "xyzzy", "plugh", "abracadabra" };
std::vector<std::string> v({ "xyzzy", "plugh", "abracadabra" });
std::vector<std::string> v{ "xyzzy", "plugh", "abracadabra" }; 

От https://en.wikipedia.org/wiki/C%2B%2B11#Initializer_lists