Причины вашего вектора-из-векторов строительства не составитель, потому что
vector<vector<double>> b(a.begin(), a.end())
находится в диапазоне построения b
с итераторами, чьи типа элемента vector<int>
, Это попытается построить b
's внутренние std::vector<double>
s с std::vector<int>
s, что неудивительно, что он не должен компилироваться.
Сравнивая это ваш первый пример,
std::vector<float> v_float(v_int.begin(), v_int.end());
находится в диапазоне построения v_float
от итераторов, чей тип элемента int
. Это работает, потому что разрешено преобразование из int в float, но не от std::vector<int>
до std::vector<double>
(или std::vector<float>
).
Вы можете вместо этого смотреть на пробегаем по каждому элементу a
и отодвигая вектор, построенный из a
«s begin()
и end()
Чтобы скопировать содержимое' станд :: вектор 'в a'std :: вектор '? –
Alejandro
Вы хотите 'std :: vector v_int (v_float.begin(), v_float.end());'? С какой проблемой вы столкнулись? –
songyuanyao
vector aCol (4); vector < vector> a (2, aCol); vector <вектор > b (a.begin(), a.end()); ?????????????? –