#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<>)
.