Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
BeRS777
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 9
#1

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

06.12.2012, 18:51. Просмотров 1412. Ответов 6

Всем доброго времени суток!
прошу помочь в решении задачи:
Из числовой последовательности найти удалить все элементы, лежащие в промежутке [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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2012, 18:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос stl, удаление элементов в list (C++):

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

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

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

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

STL list. В изначально пустой список вставить 100 элементов путем вставки в случайную позицию - C++
В изначально пустой список вставить 100 элементов путем вставки в случайную позицию. Случайная позиция генерируется каждый раз заново при...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
prazuber
110 / 110 / 3
Регистрация: 29.04.2010
Сообщений: 240
06.12.2012, 18:55 #2
C++
1
a.erase(a.begin() + A, a.begin() + B);
Такое должно сработать.
0
BeRS777
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 9
06.12.2012, 18:56  [ТС] #3
Цитата Сообщение от PraZuBeR Посмотреть сообщение
C++
1
a.erase(a.begin() + A, a.begin() + B);
Такое должно сработать.
так тоже пробовал не получается сразу 11 ошибок выдаёт компилятор
0
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
06.12.2012, 19:01 #4
remove_if

Добавлено через 1 минуту
Цитата Сообщение от BeRS777 Посмотреть сообщение
не могу задать итераторами нужный промежуток
Как я понял, здесь просят удалить не элементы от а до б, а элементы, у которых значение в промежутке лежит. Его итераторами задавать не нужно.
0
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 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
I.M.
564 / 547 / 5
Регистрация: 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
BeRS777
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 9
06.12.2012, 20:11  [ТС] #7
Цитата Сообщение от Vourhey Посмотреть сообщение
remove_if

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

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

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

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

Как я понял, здесь просят удалить не элементы от а до б, а элементы, у которых значение в промежутке лежит. Его итераторами задавать не нужно.
Можешь подробней как мне этой функцией воспользоваться? она получается удаляет если функция возвращает true, то есть функция должна возвращать true, если текущие значение находится в промежутке и удалять это значение? или как то по-другому, можешь объяснить?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2012, 20:11
Привет! Вот еще темы с ответами:

Работа с STL list + пропись List.h - C++
Здравствуйте! Помогите, пожалуйста, разобраться с STL list. Нужно сделать программу в которой будет содержаться класс Student, прописать...

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

Удаление нескольких элементов в list - C++
Собственно, нарушается ли порядок итераторов при удалении? Т.е. могу ли я в цикле по всему list'у, если элемент не удовлетворяет условию,...

STL List - C++
Вот в чем проблема, была дана задача, решить которую надо было с помощью Deque и List, Deque надобыло оформить через STL, а List написать...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.12.2012, 20:11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru