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

C++: How to make a vector that already contains elements

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
C++: Easiest way to initialize an STL vector with hardcoded elements
How to initialize a vector in c++

我想知道是否有一种方法可以用已公布的元素制作一个向量。

而不是必须这样做:

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

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

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

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

因为在向量中插入每个数字需要很多工作。有这个的捷径吗?


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

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

此功能称为统一初始化。

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


您可以使用boost::assign

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


你可以在C++ 11中做

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

正如Greg Hewgill在C++ 98中提出的那样

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

恭维:https://stackoverflow.com/a/223627/1276982


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

标准::矢量v 1,2,3,4

可以通过C++ 98中的构造函数创建相同值的多个元素。

1
std::vector<int> v (5, 6); //6 6 6 6 6

如果没有C++ 11,就可以创建某种推后置对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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;
}

C++ 11具有这样的特性,大多数编译器支持它。

在GCC中启用:

G++-标准=GNU++0X

我认为,VS2010是开箱即用的。