C ++:如何制作已包含元素的向量

时间:2012-03-21 23:11:37

标签: c++ vector

  

可能重复:
  C++: Easiest way to initialize an STL vector with hardcoded elements
  How to initialize a vector in c++

我想知道是否有办法制作带有已宣布元素的矢量..

而不是必须这样做:

vector< int > v;  
v.push_back(3);  
v.push_back(5);  
v.push_back(1);  

等,其中v = {3,5,1},

我想制作一个已包含以下元素的向量:

vector< int > v = {3,5,1};

因为在向量中插入每个数字是很多工作。这有什么捷径吗?

5 个答案:

答案 0 :(得分:11)

C ++ 11完全支持您建议的语法:

vector< int > v = {3,5,1};

此功能称为uniform initialization

在该语言的早期版本中,没有任何“好”的方法可以做到这一点。

答案 1 :(得分:3)

您可以使用boost::assign

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

答案 2 :(得分:2)

你可以用C ++ 11

std::vector< int > v = {3,5,1};
正如Greg Hewgill建议的那样,或者在C ++ 98中

static const int v_[] = {3,5,1};
std::vector<int> vec (v_, v_ + sizeof(v_) / sizeof(v_[0]) );

赞美:https://stackoverflow.com/a/2236227/1276982

答案 3 :(得分:1)

是的,你可以在C ++ 11中做到

std :: vector v {1,2,3,4};

您可以通过C ++ 98

中的构造函数创建多个具有相同值的元素
std::vector<int> v (5, 6); //6 6 6 6 6

如果你没有C ++ 11,你可以创建某种回推对象

#include <vector>

struct pb{
    std::vector<int>& v_;  

    pb(std::vector<int>& v) 
    : v_(v){}; 

    pb& operator+(int i) {
        v_.push_back(i);
        return *this;  
    }
};

int main() {
    std::vector<int> d;
    pb(d)+4+3; 
}

答案 4 :(得分:0)

C ++ 11具有这样的功能,大多数编译器都支持它。

在gcc中启用:

g ++ -std = gnu ++ 0x

VS2010支持开箱即用