Инициализировать векторный массив строк - PullRequest
61 голосов
/ 24 ноября 2010

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

, например:

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

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

Ответы [ 8 ]

63 голосов
/ 24 ноября 2010

Сортировка:

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;
}
28 голосов
/ 08 сентября 2015

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

// static std::vector<std::string> v;
v = {"haha", "hehe"};
23 голосов
/ 24 ноября 2017

Это 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

15 голосов
/ 24 ноября 2010
 const char* args[] = {"01", "02", "03", "04"};
 std::vector<std::string> v(args, args + 4);

А в C ++ 0x вы можете воспользоваться std::initializer_list<>:

http://en.wikipedia.org/wiki/C%2B%2B0x#Initializer_lists

10 голосов
/ 27 июня 2012
Решение

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

const char *args[] = {"hello", "world!"};
std::vector<std::string> v(args, std::end(args));
5 голосов
/ 02 марта 2012

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

const char* args[] = {"01", "02", "03", "04"};
std::vector<std::string> v(args, args + sizeof(args)/sizeof(args[0])); //get array size
2 голосов
/ 24 ноября 2010

Взгляните на boost::assign.

1 голос
/ 24 ноября 2010

В C ++ 0x вы сможете инициализировать контейнеры так же, как массивы

http://www2.research.att.com/~bs/C++0xFAQ.html#init-list

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...