-
白衣染霜花
一种方法是使用数组初始化向量。static const int arr[] = {16,2,77,29};vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) );
-
慕妹3242003
如果编译器支持C+11,则只需执行以下操作:std::vector<int> v = {1, 2, 3, 4};这是GCC版的。截至4.4版..不幸的是,VC+2010在这方面似乎落后了。或者,Boost.分配库使用非宏魔术允许以下操作:#include <boost/assign/list_of.hpp>...std::vector<int> v = boost::assign::list_of(1)(2)(3)(4);或:#include <boost/assign/std/vector.hpp>using namespace boost::assign;...std::vector<int> v;v += 1, 2, 3, 4;但请记住,这有一些开销(基本上,list_of构造一个std::deque因此,对于性能关键的代码,最好像Yaco by所说的那样做。
-
12345678_0001
在C+0x中,您将能够以与数组相同的方式进行操作,但不符合当前标准。在只有语言支持的情况下,您可以使用:int tmp[] = { 10, 20, 30 };std::vector<int> v( tmp, tmp+3 ); // use some utility to avoid hardcoding the size here如果可以添加其他库,则可以尝试Boost:As期:vector<int> v = list_of(10)(20)(30);为了避免硬编码数组的大小:// option 1, typesafe, not a compile time constanttemplate <typename T, std::size_t N>inline std::size_t size_of_array( T (&)[N] ) {
return N;}// option 2, not typesafe, compile time constant#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))// option 3, typesafe, compile time constanttemplate <typename T, std::size_t N>char (&sizeof_array( T(&)[N] ))[N]; // declared, undefined#define ARRAY_SIZE(x) sizeof(sizeof_array(x))