初始化向量的多个(唯一)条目

时间:2011-08-20 12:28:04

标签: c++ vector

使用数组,您可以执行此操作:

int a[] = { 1,2,3,4,5,6 }

你如何用矢量做到这一点?

4 个答案:

答案 0 :(得分:5)

如果您使用Boost,只需使用 Boost.Assign

std::vector<int> v = boost::assign::list_of(1)(2)(3)(4)(5)(6);

如果您没有使用Boost,可以分两步完成:

static const int a[] = {1,2,3,4,5,6};
vector<int> v (a, a + sizeof(a) / sizeof(a[0]) );

答案 1 :(得分:5)

你可以写这个,虽然它不是初始化,但看起来非常吸引人:

std::vector<int> v;
v << 1,2,3,4,5,6,7,8,9,10; //all pushed into the vector!

要支持此语法,您需要将两个实用程序运算符定义为:

template<typename T>
std::vector<T>& operator << (std::vector<T>& v, const T & item)
{
    v.push_back(item);  return v;
}
template<typename T>
std::vector<T>& operator,(std::vector<T>& v, const T & item)
{
    v.push_back(item);  return v;
}

你已经完成了!

测试代码:

int main() {
       std::vector<int> v;
       v << 1,2,3,4,5,6,7,8,9,10;

       for ( size_t i = 0 ; i < v.size() ; ++i )
             std::cout << v[i] << " ";
}

输出:

1 2 3 4 5 6 7 8 9 10 

在线演示:http://www.ideone.com/1hyR3

使用实用程序操作符,您实际上可以避免临时变量,例如@ Als解决方案中的临时变量,您可以在不加强的情况下编写它!

答案 2 :(得分:1)

如果您不想使用boost,可以使用:

std::vector<int> myvec;
int myints[] = {1776, 7, 4};
myvec.assign(myints, myints + 3);

不完全相同,但它非常接近。我总是用这个。

答案 3 :(得分:0)

从C ++ 11开始,您可以创建具有列表初始化功能的矢量对象,如下所示:

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

在C ++ 17中,您可以省略类型,以允许C ++根据列表中传递的数据类型来推断类型(前提是您不混合使用类型):

// C++ 17
std::vector v3 = {1, 2, 3, 4};
std::vector v4 {1, 2, 3, 4};