c инициализация поля const через список инициализаторов «:» раздел

#c #initializer-list

#c #список инициализаторов

Вопрос:

В приведенном ниже коде, как я могу объявить vv const: vector<vector<float>> const vv; ? Например. существует ли какая-либо версия c 0x, которая позволит мне выполнять цикл в разделе : ... «список инициализаторов» перед {} ?

 #include <vector>
using std::vector;

struct ST {
    vector<int> const x; // simple constructor, initializ. via ": x(x)"
    vector<vector<float>> vv; // requieres loop, can be done in ": ..."?
    ST(vector<int> x, std::initializer_list<vector<float>> lv) : x(x) {
        for (auto v : lv) {
            vv.push_back(v);
        }
    }
};
  

Ответ №1:

std::vector имеет конструктор, который принимает список инициализаторов, вам не нужен цикл:

 struct ST {
    vector<int> const x;
    vector<vector<float>> const vv;

    ST(vector<int> x, std::initializer_list<vector<float>> lv) :
        x(x),
        vv{lv} 
    {}
};
  

В случае, если ваш пример упрощен и вам действительно нужен цикл, вы можете использовать static метод для инициализации const элементов в списке инициализаторов:

 struct ST {
    vector<int> const x;
    vector<vector<float>> const vv;

    ST(vector<int> x, std::initializer_list<vector<float>> lv) :
        x(x),
        vv{create_vector(lv)} 
    {}
    static vector<vector<float>> create_vector(std::initializer_list<float> lv);
};
  

Комментарии:

1. Вам вообще нужно разворачивать lv ? Он должен просто совпадать в качестве аргумента с std::vector<>(std::initializer_list<>) .