Конвертировать 1D вектор в 2D вектор - PullRequest
0 голосов
/ 03 июня 2011

Я получил ошибку компиляции при использовании std :: copy для преобразования 1D-вектора в 2D-вектор.

int main() 
{  
    std::vector< std::vector<float> > v2D(10, std::vector<float>(10, 0.0)); 
    std::vector<float> v1D(100, 0.0);

    for (int i = 0; i < 100; ++i)
        v1D.push_back(i);

    for (unsigned int j = 0; j < 10; j++)
    {
        std::copy(v1D.begin() + j * 10, v1D.begin() + (j + 1) * 10, std::back_inserter(v2D[j].begin()));
    }
}

Не могли бы вы помочь решить эту проблему?Спасибо.

1 Ответ

4 голосов
/ 03 июня 2011

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);, если вы действительно педантичны в отношении эффективности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...