Нужно удалить второй элемент из list. Все работает как надо. Но если я создаю
функцию:
И вызываю её, то ничего не происходит. Почему это так, и как это исправить?
auto delete_list_elem(list<int> list1, int k)
{
int i=0;
list<int>::iterator it = list1.begin();
while(i<=k)
{
if(i==k)
{
cout << *it << " ";
return list1.remove(*it);
cout<<"\n deleted"<<endl;
}
it++;
i++;
}
}
#include <iostream>
#include <list>
#include <iterator>
#include <ctime>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
list<int> myList;
for(int i = 0; i < 15; i++)
{
myList.push_back(rand()%20);
}
cout << "Список: ";
for ( list<int>::iterator it = myList.begin(); it != myList.end(); it++)
{
cout << *it << " ";
}
cout << "\n max: " << *max_element(myList.begin(),myList.end()) << endl;
int i=0;
int k=2; // удаление второго элемента
list<int>::iterator it = myList.begin();
while(i<=k)
{
if(i==k)
{
cout << *it << " "; /// не работает при заносе в функцию
myList.remove(*it);
cout<<"\n deleted"<<endl;
}
it++;
i++;
}
//delete_list_elem(myList,2);
for ( list<int>::iterator it = myList.begin(); it != myList.end(); it++)
{
cout << *it << " ";
}
return 0;
}
**Update: ** Проблема решена, решение в моем ответе ниже.
auto delete_list_elem(list<int>& list1, int k) // <--- Тут & появился
{
list<int>::iterator it = list1.begin();
std::advance(it, k); // <-- advance итерирует переданный итератор на k позиций
if (it != list1.end())
{
return list1.erase(it); // <--- Вернет итератор на k+1 элемент, перед it нет *
}
return it; // k больше размера списка, дефакто равет end()
}
Update: Всем спасибо, спросил у преподавателя, он внёс правки и все работает. Код:
list<int> delete_list_elem(list<int> list1, int k)
{
int i=0;
list<int>::iterator it = list1.begin();
while(i<=k)
{
if(i==k)
{
cout << *it << " ";
list1.remove(*it);
cout<<"\n deleted"<<endl;
}
it++;
i++;
}
return list1;
}
**И данная строка была добавлена в код основной программы:**
myList = delete_list_elem(myList,2);
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости