初始化字符串的向量数组

时间:2010-11-24 16:10:49

标签: c++ stl

是否可以初始化字符串的向量数组。

例如:

static std::vector<std::string> v; //声明为类成员

我使用static来初始化并用字符串填充它。或者我应该在构造函数中填充它,如果它不像我们常规数组那样初始化。

8 个答案:

答案 0 :(得分:63)

排序:

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

答案 1 :(得分:27)

如果您正在使用cpp11(如果需要,可以使用-std=c++0x标志启用),那么您可以像这样简单地初始化矢量:

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

答案 2 :(得分:21)

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

答案 3 :(得分:15)

 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

答案 4 :(得分:10)

MSVC 2010解决方案,因为它不支持向量std::initializer_list<>,但它支持std::end

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

答案 5 :(得分: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 :(得分:2)

看看boost::assign

答案 7 :(得分:1)

在C ++ 0x中,您将能够像数组一样初始化容器

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