std::back_inserter
принимает контейнер, а не итератор.Измените std::back_inserter(v2D[j].begin())
на std::back_inserter(v2D[j])
.Обратите внимание, что это будет вызывать .push_back()
на std::vector<float>
в v2D[j]
, поэтому вы, вероятно, также захотите изменить std::vector< std::vector<float> > v2D(10, std::vector<float>(10, 0.0));
на std::vector< std::vector<float> > v2D(10);
.
В качестве альтернативы, вы можете изменить std::back_inserter(v2D[j].begin())
на v2D[j].begin()
.Это работает, потому что std::copy
хочет иметь выходной итератор, а std::vector<>::iterator
ведет себя как один, когда в vector<>
имеется достаточное количество элементов для перезаписи.И таким образом, ваша текущая инициализация v2D
уже идеальна.
EDIT : Кто-то другой сказал это в отдельном ответе, а затем удалил его, поэтому я скажу этоот их имени, потому что это, безусловно, заслуживает внимания: поскольку вы инициализируете v1D
100 элементами, [1..100] цифры, которые вы затем push_back
добавляются к начальным 100 элементам (для всех из которых вы указализначение 0) вместо того, чтобы перезаписывать их.Вы должны изменить std::vector<float> v1D(100, 0.0);
на std::vector<float> v1D;
, чтобы получить поведение, которое вы, очевидно, хотите (или std::vector<float> v1D; v1D.reserve(100);
, если вы действительно педантичны в отношении эффективности).