首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++中最好地初始化字符串向量?

如何在C++中最好地初始化字符串向量?
EN

Stack Overflow用户
提问于 2014-01-16 21:31:00
回答 4查看 12.4K关注 0票数 7

我通常喜欢python的语法。

V= "sds“、"bsdf”、"dsdfaf“

我目前在C++中的内容如下所示

代码语言:javascript
复制
vector<string> v;
v.push_back("sds");
v.push_back("bsdf");
v.push_back("dsdfaf");

有没有更好/更干净的方法来做到这一点?注意,v在初始化后保持不变。因此,数组也可能工作,但是数组的问题是,我还需要在代码中硬编码数组的长度。

代码语言:javascript
复制
char* v[] = {"sds", "bsdf", "dsdfaf"};
for (int i = 0; i < 3; ++i) do_something(v[i]);

编辑:我没有C++11。我的编译器是gcc 4.1.2

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-16 21:46:48

C++03解决方案:

使用使用一对迭代器的向量构造函数。

代码语言:javascript
复制
char* arr[] = {"sds", "bsdf", "dsdfaf"};
vector<string> v(arr, arr + sizeof(arr)/sizeof(arr[0]));

如果初始化后不需要更改长度,则使用数组。若要避免硬编码数组长度,请使用此函数模板推断大小。

代码语言:javascript
复制
template<typename T, std::size_t N>
std::size_t length_of( T const (&)[N] ) { return N; }

char* v[] = {"sds", "bsdf", "dsdfaf"};
for (int i = 0; i < length_of(v); ++i) do_something(v[i]);

请注意,这在传递char **的函数中不起作用。

使用boost::assign::list_of

代码语言:javascript
复制
using boost::assign::list_of;
std::vector<std::string> v = list_of("sds")("bsdf")("dsdfaf");
票数 4
EN

Stack Overflow用户

发布于 2014-01-16 21:33:24

在C++11中,您可以编写:

代码语言:javascript
复制
std::vector<std::string> v{"sds", "bsdf", "dsdfaf"};
票数 4
EN

Stack Overflow用户

发布于 2014-01-16 21:33:34

有没有更好/更干净的方法来做到这一点?

您可以使用大括号初始化语法。

代码语言:javascript
复制
std::vector<std::string> v { "sds", "bsdf", "dsdfaf" };

注意,v在初始化后保持不变。

您可以使用std::array (自C++11):

代码语言:javascript
复制
std::array<std::string, 3> a {{ "sds", "bsdf", "dsdfaf" }};

您仍然需要对元素的数量进行“硬编码”,但是它并不是动态的,所以您不会丢失太多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21173308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档