Инициализация векторного массива строк


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

например:

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

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

8 53

8 ответов:

вид:

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;
}

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

// static std::vector<std::string> v;
v = {"haha", "hehe"};
 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

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

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

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

то же, что и @Moo-Juice:

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

посмотри boost::assign.

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

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