Как вставить элемент в список по заданному индексу в C ++ - PullRequest
0 голосов
/ 23 мая 2019

Я работаю над кодом c++, в который мне нужно вставить элемент по указанному индексу списка.У меня есть два списка:

list <int> objectIdList;  //This list will save id's of object
list <double> objectIdDtimeList;  //This list will save time duration of each particular object id.

У меня есть код, из которого я сохраняю все идентификаторы объекта в objectIdList, который выглядит следующим образом:

Index    Value
[0]      3
[1]      6
[2]      2

Теперь мне нужно сохранитьпродолжительность этих идентификаторов объектов (3, 6, 2) в objectIdDtimeList.Мой план состоит в том, чтобы сохранить время в списке по индексу, который является идентификатором объекта.Например, для идентификатора объекта 3 его общая продолжительность будет сохранена в списке с индексом 3.Для объекта с идентификатором 6 его продолжительность будет сохранена с индексом 6.

Для этого я планировал использовать list.insert(), как показано ниже:

time_t start, end;
time(&start);

/*
 * SOME CODE HERE
 * SOME CODE HERE
*/

for (auto id : objectIdList)
{
    time(&end);
    double time_passed = difftime(current, start);  //Getting the time duration in seconds

    list<int>::iterator it = objectIdList.begin();

    advance(it, id);  // iterator to point to object id index

    objectIdDtimeList.insert(it, time_passed);
}

Но приведенный выше коддавая ниже ошибка:

Severity    Code    Description Project File    Line    Suppression State
Error (active)  E0304   no instance of overloaded function "std::list<_Ty, _Alloc>::insert [with _Ty=double, _Alloc=std::allocator<double>]" matches the argument list

Severity    Code    Description Project File    Line    Suppression State
Error   C2664   'std::_List_iterator<std::_List_val<std::_List_simple_types<_Ty>>> std::list<_Ty,std::allocator<_Ty>>::insert(std::_List_const_iterator<std::_List_val<std::_List_simple_types<_Ty>>>,unsigned __int64,const _Ty &)': cannot convert argument 1 from 'std::_List_iterator<std::_List_val<std::_List_simple_types<_Ty>>>' to 'std::_List_const_iterator<std::_List_val<std::_List_simple_types<_Ty>>>'   

Есть ли способ, которым я могу достичь этой функциональности.Есть ли другая альтернатива, чтобы сделать это.Спасибо

1 Ответ

2 голосов
/ 23 мая 2019

Здесь вы смешиваете два разных типа итераторов.

list<int>::iterator it = objectIdList.begin();

Это итератор в objectIdList, но для вызова objectIdDtimeList.insert(...) вам нужен итератор в objectIdDtimeList. Поэтому попробуйте изменить вышеприведенную строку на

auto it = objectIdDtimeList.begin();

Продвижение правильного итератора с id должно все еще работать, и вставка должна быть успешной.

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