【问题标题】:C++: How to make a vector that already contains elements [duplicate]C ++:如何制作已经包含元素的向量[重复]
【发布时间】:2012-04-06 12:53:12
【问题描述】:

可能重复:
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};

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

【问题讨论】:

标签: c++ vector


【解决方案1】:

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

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

此功能称为uniform initialization

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

【讨论】:

【解决方案2】:

C++11有这样一个特性,大部分编译器都支持。

在 gcc 中启用:

    g++ -std=gnu++0x

我认为VS2010开箱即用地支持它

【讨论】:

    【解决方案3】:

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

    std::vector<int> 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】:

      您可以使用boost::assign

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

      【讨论】:

        【解决方案5】:

        你可以在 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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-05-07
          • 2022-07-05
          • 1970-01-01
          • 2018-11-26
          • 1970-01-01
          • 1970-01-01
          • 2014-10-12
          相关资源
          最近更新 更多