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

后端 未结 29 2611
终归单人心
终归单人心 2020-11-22 05:07

I can create an array and initialize it like this:

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

How do I create a std::vector and initialize it sim

相关标签:
29条回答
  • 2020-11-22 05:24

    Below methods can be used to initialize the vector in c++.

    1. int arr[] = {1, 3, 5, 6}; vector<int> v(arr, arr + sizeof(arr)/sizeof(arr[0]));

    2. vector<int>v; v.push_back(1); v.push_back(2); v.push_back(3); and so on

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

    The third one is allowed only in C++11 onwards.

    0 讨论(0)
  • 2020-11-22 05:25

    One method would be to use the array to initialize the vector

    static const int arr[] = {16,2,77,29};
    vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) );
    
    0 讨论(0)
  • In case you want to have it in your own class:

    #include <initializer_list>
    Vector<Type>::Vector(std::initializer_list<Type> init_list) : _size(init_list.size()),
    _capacity(_size),
    _data(new Type[_size])
    {
        int idx = 0;
        for (auto it = init_list.begin(); it != init_list.end(); ++it)
            _data[idx++] = *it;
    }
    
    0 讨论(0)
  • 2020-11-22 05:30

    In C++11:

    #include <vector>
    using std::vector;
    ...
    vector<int> vec1 { 10, 20, 30 };
    // or
    vector<int> vec2 = { 10, 20, 30 };
    

    Using boost list_of:

    #include <vector>
    #include <boost/assign/list_of.hpp>
    using std::vector;
    ...
    vector<int> vec = boost::assign::list_of(10)(20)(30);
    

    Using boost assign:

    #include <vector>
    #include <boost/assign/std/vector.hpp>
    using std::vector;
    ...
    vector<int> vec;
    vec += 10, 20, 30;
    

    Conventional STL:

    #include <vector>
    using std::vector;
    ...
    static const int arr[] = {10,20,30};
    vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) );
    

    Conventional STL with generic macros:

    #include <vector>
    #define ARRAY_SIZE(ar) (sizeof(ar) / sizeof(ar[0])
    #define ARRAY_END(ar) (ar + ARRAY_SIZE(ar))
    using std::vector;
    ...
    static const int arr[] = {10,20,30};
    vector<int> vec (arr, ARRAY_END(arr));
    

    Conventional STL with a vector initializer macro:

    #include <vector>
    #define INIT_FROM_ARRAY(ar) (ar, ar + sizeof(ar) / sizeof(ar[0])
    using std::vector;
    ...
    static const int arr[] = {10,20,30};
    vector<int> vec INIT_FROM_ARRAY(arr);
    
    0 讨论(0)
  • 2020-11-22 05:30
    typedef std::vector<int> arr;
    
    arr a {10, 20, 30};       // This would be how you initialize while defining
    

    To compile use:

    clang++ -std=c++11 -stdlib=libc++  <filename.cpp>
    
    0 讨论(0)
  • 2020-11-22 05:31

    If you don't want to use boost, but want to enjoy syntax like

    std::vector<int> v;
    v+=1,2,3,4,5;
    

    just include this chunk of code

    template <class T> class vector_inserter{
    public:
        std::vector<T>& v;
        vector_inserter(std::vector<T>& v):v(v){}
        vector_inserter& operator,(const T& val){v.push_back(val);return *this;}
    };
    template <class T> vector_inserter<T> operator+=(std::vector<T>& v,const T& x){
        return vector_inserter<T>(v),x;
    }
    
    0 讨论(0)
提交回复
热议问题