猿问

用硬编码元素初始化STD:向量的最简单方法是什么?

用硬编码元素初始化STD:向量的最简单方法是什么?

我可以创建一个数组并像这样初始化它:

int a[] = {10, 20, 30};

如何创建std::vector并初始化它同样优雅?

我所知道的最好的方法是:

std::vector<int> ints;ints.push_back(10);ints.push_back(20);ints.push_back(30);

有更好的办法吗?


吃鸡游戏
浏览 371回答 3
3回答

白衣染霜花

一种方法是使用数组初始化向量。static&nbsp;const&nbsp;int&nbsp;arr[]&nbsp;=&nbsp;{16,2,77,29};vector<int>&nbsp;vec&nbsp;(arr,&nbsp;arr&nbsp;+&nbsp;sizeof(arr)&nbsp;/&nbsp;sizeof(arr[0])&nbsp;);

慕妹3242003

如果编译器支持C+11,则只需执行以下操作:std::vector<int>&nbsp;v&nbsp;=&nbsp;{1,&nbsp;2,&nbsp;3,&nbsp;4};这是GCC版的。截至4.4版..不幸的是,VC+2010在这方面似乎落后了。或者,Boost.分配库使用非宏魔术允许以下操作:#include&nbsp;<boost/assign/list_of.hpp>...std::vector<int>&nbsp;v&nbsp;=&nbsp;boost::assign::list_of(1)(2)(3)(4);或:#include&nbsp;<boost/assign/std/vector.hpp>using&nbsp;namespace&nbsp;boost::assign;...std::vector<int>&nbsp;v;v&nbsp;+=&nbsp;1,&nbsp;2,&nbsp;3,&nbsp;4;但请记住,这有一些开销(基本上,list_of构造一个std::deque因此,对于性能关键的代码,最好像Yaco by所说的那样做。

12345678_0001

在C+0x中,您将能够以与数组相同的方式进行操作,但不符合当前标准。在只有语言支持的情况下,您可以使用:int&nbsp;tmp[]&nbsp;=&nbsp;{&nbsp;10,&nbsp;20,&nbsp;30&nbsp;};std::vector<int>&nbsp;v(&nbsp;tmp,&nbsp;tmp+3&nbsp;);&nbsp;//&nbsp;use&nbsp;some&nbsp;utility&nbsp;to&nbsp;avoid&nbsp;hardcoding&nbsp;the&nbsp;size&nbsp;here如果可以添加其他库,则可以尝试Boost:As期:vector<int>&nbsp;v&nbsp;=&nbsp;list_of(10)(20)(30);为了避免硬编码数组的大小://&nbsp;option&nbsp;1,&nbsp;typesafe,&nbsp;not&nbsp;a&nbsp;compile&nbsp;time&nbsp;constanttemplate&nbsp;<typename&nbsp;T,&nbsp;std::size_t&nbsp;N>inline&nbsp;std::size_t&nbsp;size_of_array(&nbsp;T&nbsp;(&)[N]&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;return&nbsp;N;}//&nbsp;option&nbsp;2,&nbsp;not&nbsp;typesafe,&nbsp;compile&nbsp;time&nbsp;constant#define&nbsp;ARRAY_SIZE(x)&nbsp;(sizeof(x)&nbsp;/&nbsp;sizeof(x[0]))//&nbsp;option&nbsp;3,&nbsp;typesafe,&nbsp;compile&nbsp;time&nbsp;constanttemplate&nbsp;<typename&nbsp;T,&nbsp;std::size_t&nbsp;N>char&nbsp;(&sizeof_array(&nbsp;T(&)[N]&nbsp;))[N];&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;declared,&nbsp;undefined#define&nbsp;ARRAY_SIZE(x)&nbsp;sizeof(sizeof_array(x))
随时随地看视频慕课网APP
我要回答