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

Remove_copy_if - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Переставить значение элементов заданного одномерного массива, так чтобы все нулевые оказались в конце массива http://www.cyberforum.ru/cpp-beginners/thread1310735.html
А не нулевые в начале, не нарушая порядок, в котором они были
C++ Вывести на экран график функции, используя символы Используя стандартные символы (.,/*|\-_) вывести на экран график функции в заданном интервале, с задданным шагом. y=xcosx, , п/10; http://www.cyberforum.ru/cpp-beginners/thread1310711.html
C++ Свой тип Boolean
хз зачем я это написал просто скучно было :D enum Boolean_t { False, True }; struct Boolean { Boolean_t value; Boolean() : value(False) {} Boolean(Boolean_t v) : value(v) {}
Вывести на экран таблицу ASCII C++
Помогите пожалуйста с заданием: - Вывести на экран таблицу ASCII (столбцы - три старших двоичных разряда таблицы ASCII, строки - четыре младших разряда).
C++ LZW - восстановление. LZW GIF. C++ http://www.cyberforum.ru/cpp-beginners/thread1310706.html
Всем привет.. задача такая: не могу понять, алгоритм декодирования LZW.. Необходимо как в этом примере http://habrahabr.ru/post/127083/ НАПРИМЕР Следующие 7 байт: <b></b>. Нужно перевести их в двоичное представление 10000100 01100010
C++ Конкатенация строк Помогите,пожалуйста,идиоту.Не понимаю как правильно конкатенацию строк написать("сложение" строк) #include <iostream> class STRING { private: char *data; public: подробнее

Показать сообщение отдельно
PhilCollins
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 5

Remove_copy_if - C++

25.11.2014, 18:45. Просмотров 449. Ответов 11
Метки (Все метки)

Требуется реализовать свой аналог шаблонной функции remove_copy_if. Из последовательности нужно убрать все четные элементы. Используется контейнер list. Я написал свой код:
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
#include <iostream>
#include <list>
 
using std::list;
using std::cin;
using std::cout;
 
class DivideByTwo {
public:
    bool operator() (const int x) const {
        return x % 2 == 0;
    }
};
 
namespace mystd {
template<typename It, typename Out, typename Pred>
Out remove_copy_if(It first, It last, Out out, Pred f) {
    for (; first != last; ++first) {
        if (!f(*first)) {
            *out++ = *first;
        }
    }
    return out;
}
}
 
int main() {
    list<int> numbers;
    int x;
    while (cin) {
        cin >> x;
        numbers.push_back(x);
    }
    mystd::remove_copy_if(numbers.begin(),
                                       numbers.end(),
                                       std::ostream_iterator<int>(cout, " "),
                                       DivideByTwo());
    cout << "\n";
    return 0;
}
Вроде все работает, но вот если во введенной последовательности последний элемент нечетный, то он печется два раза. Не понимаю, почему так происходит!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru