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

Не могу разобраться в функции - C++

Восстановить пароль Регистрация
 
Вовастый
3 / 3 / 0
Регистрация: 03.09.2010
Сообщений: 11
21.12.2012, 22:20     Не могу разобраться в функции #1
Функция filter() ищет элементы в исходном контейнере, значения которых соответствуют условию (значению), переданному в функцию при ее вызове, потом копирует найденные значения элементов в целевой контейнер.
Беда в том, что если копировать элементы с исходного контейнера в целевой посредством присваивания, программа работает, но при этом нужно объявлять вектор и указывать его размер, а так как размер вектора может превышать реальное количество элементов в нем, логичным выглядит копирование посредством вставки нового элемента в контейнер баз объявленного размера, но тут у меня возникли трудности и мне срочно нужна подсказка, так как сам я это пока не осилю. Заранее спасибо.

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
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <functional>
 
using namespace std;
 
//шаблон функции filter 
template <typename InputIterator, typename OutputIterator,
              typename ElemType, typename Comp>
OutputIterator filter(InputIterator first, OutputIterator last,
               OutputIterator at, const ElemType &val, Comp pred)
{
    while((first = find_if(first, last, bind2nd(pred, val))) != last)
    {
         cout << "найдено: " << *first << endl;
         *at++ = *first++;
    }
    return at;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Rus");
 
    const int elem_size = 8;
 
    int ia[elem_size] = {12, 8, 43, 0, 6, 21, 3, 7};
    vector<int> ivec(ia, ia+elem_size);
 
    int ia2[elem_size];
    //не задаю размер вектора, так как буду использовать вставку элементов вместо присваивания...
    vector<int> ivec2;
 
    cout << "отфильтровываю из массива числа меньше 8\n";
    filter(ia, ia+elem_size, ia2, elem_size, less<int>());
 
    cout << "отфильтровываю из массива числа больше 8)\n";
    //...но к сожалению функция не работает со вставкой
    filter(ivec.begin(), ivec.end(), back_inserter(ivec2), elem_size, greater<int>());
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2012, 22:20     Не могу разобраться в функции
Посмотрите здесь:

C++ Не могу разобраться в С++
C++ C++ не могу разобраться в нём
Не могу разобраться с отработкой рекурсивной функции C++
Функции и файлы! Для продвинутых, я не могу разобраться. C++
не могу разобраться с синтаксисом C++
С циклом for не могу разобраться C++
C++ не могу разобраться с функциями ( значение функции, заданной с помощью ряда)
C++ не могу разобраться в функции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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