Инициализировать векторный массив строк
Можно ли инициализировать векторный массив строк.
например:
static std::vector<std::string> v;
//объявлен как член класса
Я использовал static
только для инициализации и заполнения его строками. Или я должен просто заполнить его в конструкторе, если он не может быть инициализирован, как и обычные массивы.
Ответы
Ответ 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"};
Ответ 3
const char* args[] = {"01", "02", "03", "04"};
std::vector<std::string> v(args, args + 4);
И в С++ 0x вы можете воспользоваться std::initializer_list<>
:
http://en.wikipedia.org/wiki/C%2B%2B0x#Initializer_lists
Ответ 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
Ответ 6
Взгляните на boost::assign
.
Ответ 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
Ответ 8
В С++ 0x вы сможете инициализировать контейнеры так же, как массивы
http://www2.research.att.com/~bs/C++0xFAQ.html#init-list