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

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

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

如何创建一个std::vector并初始化它类似于优雅?

我知道的最好方法是:

std::vector<int> ints;

ints.push_back(10);
ints.push_back(20);
ints.push_back(30);

有没有更好的办法?


一种方法是使用数组来初始化向量

static const int arr[] = {16,2,77,29};
vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) );

如果你的编译器支持C ++ 11,你可以简单地做:

std::vector<int> v = {1, 2, 3, 4};

这在4.4版本的GCC中可用。 不幸的是,VC ++ 2010在这方面似乎落后了。

或者,Boost.Assign库使用非宏魔法来允许以下内容:

#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 ),因此对于性能至关重要的代码,您应该像Yacoby所说的那样做更好。


在C ++ 0x中,您将能够以与您使用数组相同的方式执行此操作,但不能使用当前标准。

只有语言支持,您可以使用:

int tmp[] = { 10, 20, 30 };
std::vector<int> v( tmp, tmp+3 ); // use some utility to avoid hardcoding the size here

如果你可以添加其他库,你可以尝试boost :: assignment:

vector<int> v = list_of(10)(20)(30);

为了避免硬编码数组的大小:

// option 1, typesafe, not a compile time constant
template <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 constant
template <typename T, std::size_t N>
char (&sizeof_array( T(&)[N] ))[N];    // declared, undefined
#define ARRAY_SIZE(x) sizeof(sizeof_array(x))
链接地址: http://www.djcxy.com/p/53953.html

上一篇: What is the easiest way to initialize a std::vector with hardcoded elements?

下一篇: How do I erase an element from std::vector<> by index?