Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 10
1

stl, удаление элементов в list

06.12.2012, 18:51. Показов 4319. Ответов 6

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
прошу помочь в решении задачи:
Из числовой последовательности найти удалить все элементы, лежащие в промежутке [A*X; B*X], где X – среднее арифметическое элементов последовательности, A и B – задаваемые пользователем коэффициенты. Использовать Deque и List. Один из них написать вручную, другой можно использовать stl. Deque я написал вручную. Лист не могу сделать уже 3 недели где-то, не могу понять как удалить из промежутка с помощью итераторов. Я уже по всякому пробовал, никак не получается. Удалить пробовал функцией erase(), не могу задать итераторами нужный промежуток.
Прошу помощи

Вот что у меня есть:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <clocale>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    int A, B;
    cout<<"Введите число A: ";
    cin>>A;
    cout<<"Введите число B: ";
    cin>>B;
        while(B<A)
    {
        cout<<"Значение A должно быть меньше значения B!"<<endl;
        cout<<"Введите число A: ";
        cin>>A;
        cout<<"Введите число B: ";
        cin>>B;
    }
    cout<<endl;
    cout<<"Введите элементы последовательности: ";
    list<int>a;
    a.begin();
    int i;
    cin>>i;
    int n=0;
    while(!feof(stdin))
    {
        
        n++;
        a.push_back(i);
        cin>>i;
    }
    cout<<"Полученная последовательность: ";
    for(list<int>::iterator it=a.begin();it!=a.end();it++)
        cout<<*it<<" ";
        cout<<endl;
        int x=0;
    for(list<int>::iterator it=a.begin();it!=a.end();it++)
        x=x+*it;
    x=x/n;
    cout<<endl;
    cout<<"Среднее арифмитическое последовательности равно(x): ";
    cout<<x<<endl;
    A=A*x;
    B=B*x;
 
 
    //cout<<A<<endl;
    //cout<<B<<endl;
    cout<<"Полученная последовательность: ";
 
    for(list<int>::iterator it=a.begin;it=a.end();it++)
        cout<<*it;
    cout<<endl;
        system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2012, 18:51
Ответы с готовыми решениями:

Удаление list STL
Из списка, содержащего 100 тыс. элементов, удалить все элементы путем многократного удаления...

c++ stl удаление елемента из list
for(std::list&lt;gun&gt;::iterator iter = Gun.begin(); iter != Gun.end(); iter++) { iter-&gt;controle();...

Удаление элемента списка list.STL
Всем привет! Ребята, не могу понять почему у меня не получается удалить конкретный элемент списка....

Сортировка диапазона элементов в list (STL)
Здравствуйте! Требуется ввести числа в список, задать числа a и b, изменить порядок элементов,...

6
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
06.12.2012, 18:55 2
C++
1
a.erase(a.begin() + A, a.begin() + B);
Такое должно сработать.
0
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 10
06.12.2012, 18:56  [ТС] 3
Цитата Сообщение от PraZuBeR Посмотреть сообщение
C++
1
a.erase(a.begin() + A, a.begin() + B);
Такое должно сработать.
так тоже пробовал не получается сразу 11 ошибок выдаёт компилятор
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
06.12.2012, 19:01 4
remove_if

Добавлено через 1 минуту
Цитата Сообщение от BeRS777 Посмотреть сообщение
не могу задать итераторами нужный промежуток
Как я понял, здесь просят удалить не элементы от а до б, а элементы, у которых значение в промежутке лежит. Его итераторами задавать не нужно.
0
Обитатель форума
201 / 184 / 54
Регистрация: 28.10.2012
Сообщений: 543
06.12.2012, 19:01 5
C++
1
2
3
    a.erase (a.begin()+5); // удаление, например, 6-го элемента вектора
 
    myvector.erase (a.begin(),a.begin()+3); // удаление первых трех элементов вектора.
0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
06.12.2012, 19:02 6
C++
1
a.erase(std::next(a.begin(), A), std::next(a.begin(), B));
0
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 10
06.12.2012, 20:11  [ТС] 7
Цитата Сообщение от Vourhey Посмотреть сообщение
remove_if

Добавлено через 1 минуту

Как я понял, здесь просят удалить не элементы от а до б, а элементы, у которых значение в промежутке лежит. Его итераторами задавать не нужно.
спасибо большое!))) я просто зол на себя жестко))) просто 3 недели ничего не мог сделать, только потому что не правильно условие задачи читал)))

Добавлено через 1 час 2 минуты
Цитата Сообщение от Vourhey Посмотреть сообщение
remove_if

Добавлено через 1 минуту

Как я понял, здесь просят удалить не элементы от а до б, а элементы, у которых значение в промежутке лежит. Его итераторами задавать не нужно.
Можешь подробней как мне этой функцией воспользоваться? она получается удаляет если функция возвращает true, то есть функция должна возвращать true, если текущие значение находится в промежутке и удалять это значение? или как то по-другому, можешь объяснить?
0
06.12.2012, 20:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2012, 20:11
Помогаю со студенческими работами здесь

STL list. В изначально пустой список вставить 100 элементов путем вставки в случайную позицию
В изначально пустой список вставить 100 элементов путем вставки в случайную позицию. Случайная...

Удаление элементов из односвязного списка (STL)
Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, с контейнером forward_list&lt;int&gt; (именно с...

Алгоритмы STL Удаление элементов в векторе
Банальный вопрос. vector&lt;int&gt; В нем разные числа могут повторяться. Хочу удалить заданное...

Удаление элементов вектора с использованием итератора в STL
Задача: создать программу, в которую пользователь может ввести свой список из 50 названий игр, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru