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

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

Войти
Регистрация
Восстановить пароль
 
kn0w
3 / 3 / 0
Регистрация: 09.10.2012
Сообщений: 72
#1

Функция (удаление элементов вектора, равных переданному значению) - C++

03.01.2013, 13:10. Просмотров 539. Ответов 6
Метки нет (Все метки)

Здравствуйте товарищи и С Новым Годом!!! Большую часть задания сделал, нужно еще кое что дополнить, все никак не соображу. Вообщем мне нужно, чтобы "Filter" удалял элементы вектора равные переданному значению т.е мне нужна еще одна функция , которая будет удалять например вектор "20".
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <conio.h>
 
using namespace std;
 
struct vect
{
    int length ;
    struct vect *next;
};
 
vect *first = NULL;
vect *follow = NULL;
vect *node, *node2;
void Add()
{
    vect *temp;
    temp = new vect;
    cout << "\nEnter length for addition ";
    cin >> temp->length;
 
    if(!first)
    {
        first = temp;
        temp->next = NULL;
 
    }
     
    follow = first;
    while (follow->next)
        follow = follow ->next;
    follow->next = temp;
    temp->next=NULL;
 
}
 
void Print()
{
        
        follow = first;
        while (follow)
        {
            cout << '\n' << follow->length;
            follow = follow->next;
        }
        cout << "\nPress any key...";
        while (!kbhit());
    
}
 
void sort()
{
    
    for( node = first; node; node = node->next )
        for( node2 = first; node2; node2 = node2->next )
            if( node->length > node2->length ){ 
                int i = node->length;
                node->length = node2->length;
                node2->length = i;
            }
        cout << "\nSorting is finished...";
        while (!kbhit());
    
 
}
void Filter ()
{
       
}
 
 
void main()
{
    system("color F0");
    int key = 0;
    
    while (key != 27)
    {
        cout << "\n1.  Add to vector"; //добавить вектор
        cout << "\n2.  To execute sorting"; // выполнение сортировки
        cout << "\n3.  Print the sorted vectors";   //вывод на экран отсорти-рованных векторов
        cout << "\n4.  Filter";//Удаление вектора
        cout << "\n    Esc Exit"; //выход из программы
        cout << "\n? ";
        key = getche();
 
                 switch (key)
        {
            case '1':
                Add();
                break;
            case '2':
                sort();
                break;
            case '3':
                Print();
                break;
            case '4':
                Filter();
                break;
        }
    }
    system("PAUSE");
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2013, 13:10     Функция (удаление элементов вектора, равных переданному значению)
Посмотрите здесь:

Поиск и удаление равных элементов массива C++
Массив и Удаление элементов вектора C++
C++ Массив: Заменить последний из отрицательных элементов в массиве на три элемента, равных заданному значению.
Удаление элементов вектора C++
C++ Связный список; удаление равных максимальному элементов
Удаление элементов из вектора C++
C++ Найти числа элементов в двумерном массиве, равных значению Т, вводимому с клавиатуры и перемножьте эти элементы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12697 / 7171 / 800
Регистрация: 27.09.2012
Сообщений: 17,681
Записей в блоге: 2
Завершенные тесты: 1
03.01.2013, 13:20     Функция (удаление элементов вектора, равных переданному значению) #2
Лист A4, карандаш и рисунок предстоящей работы - ответ придет сам по себе.
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
03.01.2013, 13:34     Функция (удаление элементов вектора, равных переданному значению) #3
C++
1
v.erase(std::find(v.begin(), v.end(), n));
v - вектор.
n - удаляемый елемент.
Croessmah
03.01.2013, 13:42
  #4

Не по теме:

Цитата Сообщение от SeregaC++ Посмотреть сообщение
C++
1
v.erase(std::find(v.begin(), v.end(), n));
v - вектор.
n - удаляемый елемент.
Вы посмотрите на код ТС

Issues
03.01.2013, 13:46
  #5

Не по теме:

Croessmah, сорри

kn0w
3 / 3 / 0
Регистрация: 09.10.2012
Сообщений: 72
06.01.2013, 12:25  [ТС]     Функция (удаление элементов вектора, равных переданному значению) #6
Help
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2013, 12:41     Функция (удаление элементов вектора, равных переданному значению)
Еще ссылки по теме:

Удаление всех элементов вектора C++
C++ Удаление элементов вектора со сдвигом
C++ Удаление элементов из вектора
Удаление из вектора повторяющихся элементов C++
C++ Удаление одинаковых элементов вектора

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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
06.01.2013, 12:41     Функция (удаление элементов вектора, равных переданному значению) #7
Код
Ваш список-вектор:

+----+      +----+      +----+      +----+      +----+      +----+      +----+
|  5 |  /-->| 10 |  /-->|  7 |  /-->|  2 |  /-->| 20 |  /-->|  3 |  /-->| 11 |
+----+  |   +----+  |   +----+  |   +----+  |   +----+  |   +----+  |   +----+
| ==----/   | ==----/   | ==----/   | ==----/   | ==----/   | ==----/   | XX |
+----+      +----+      +----+      +----+      +----+      +----+      +----+

Ищем элемент, равный двадцати. Для удаления надо найти его
и предыдущий для него:

+----+      +----+      +----+      +----+      +----+      +----+      +----+
|  5 |  /-->| 10 |  /-->|  7 |  /-->|  2 |  /-->| 20 |  /-->|  3 |  /-->| 11 |
+----+  |   +----+  |   +----+  |   +----+  |   +----+  |   +----+  |   +----+
| ==----/   | ==----/   | ==----/   | ==----/   | ==----/   | ==----/   | XX |
+----+      +----+      +----+      +----+      +----+      +----+      +----+
  /\
  ||
victim

prev => XX

+----+      +----+      +----+      +----+      +----+      +----+      +----+
|  5 |  /-->| 10 |  /-->|  7 |  /-->|  2 |  /-->| 20 |  /-->|  3 |  /-->| 11 |
+----+  |   +----+  |   +----+  |   +----+  |   +----+  |   +----+  |   +----+
| ==----/   | ==----/   | ==----/   | ==----/   | ==----/   | ==----/   | XX |
+----+      +----+      +----+      +----+      +----+      +----+      +----+
  /\          /\
  ||          ||
 prev       victim

+----+      +----+      +----+      +----+      +----+      +----+      +----+
|  5 |  /-->| 10 |  /-->|  7 |  /-->|  2 |  /-->| 20 |  /-->|  3 |  /-->| 11 |
+----+  |   +----+  |   +----+  |   +----+  |   +----+  |   +----+  |   +----+
| ==----/   | ==----/   | ==----/   | ==----/   | ==----/   | ==----/   | XX |
+----+      +----+      +----+      +----+      +----+      +----+      +----+
              /\          /\
              ||          ||
             prev       victim
<...>

+----+      +----+      +----+      +----+      +----+      +----+      +----+
|  5 |  /-->| 10 |  /-->|  7 |  /-->|  2 |  /-->| 20 |  /-->|  3 |  /-->| 11 |
+----+  |   +----+  |   +----+  |   +----+  |   +----+  |   +----+  |   +----+
| ==----/   | ==----/   | ==----/   | ==----/   | ==----/   | ==----/   | XX |
+----+      +----+      +----+      +----+      +----+      +----+      +----+
                                      /\          /\
                                      ||          ||
                                     prev       victim

Если бы элемента 20 бы не было, то следующим после 2 должен быть 3.
То есть следующим для prev должен стать следующий для victim.

                                            /-----------\
                                            |           |
+----+      +----+      +----+      +----+  |   +----+  |   +----+      +----+
|  5 |  /-->| 10 |  /-->|  7 |  /-->|  2 |  |   | 20 |  >-->|  3 |  /-->| 11 |
+----+  |   +----+  |   +----+  |   +----+  |   +----+  |   +----+  |   +----+
| ==----/   | ==----/   | ==----/   | ==----/   | ==----/   | ==----/   | XX |
+----+      +----+      +----+      +----+      +----+      +----+      +----+
                                      /\          /\
                                      ||          ||
                                     prev       victim

Всё, осталось прибить victim.

+----+      +----+      +----+      +----+                  +----+      +----+
|  5 |  /-->| 10 |  /-->|  7 |  /-->|  2 |  /-------------->|  3 |  /-->| 11 |
+----+  |   +----+  |   +----+  |   +----+  |               +----+  |   +----+
| ==----/   | ==----/   | ==----/   | ==----/               | ==----/   | XX |
+----+      +----+      +----+      +----+                  +----+      +----+

Для фильтрации просто продолжаем поиск, сделав victim равным
следующему для prev, и повторяя всё вышесказанное для подходящих
элементов.
И сразу: «А можно кодом?» — Нет, нельзя.
Yandex
Объявления
06.01.2013, 12:41     Функция (удаление элементов вектора, равных переданному значению)
Ответ Создать тему
Опции темы

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