Инициализация векторного массива строк
можно ли инициализировать векторный массив строк.
например:
static std::vector<std::string> v;
//объявлен как член класса
Я static
просто инициализировать и заполнить его строками. Или я должен просто заполнить его в конструктор, если он не может быть инициализирован, как мы делаем обычные массивы.
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<>
:
Это 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
.